【问题标题】:ActionCable Not Receiving DataActionCable 未接收数据
【发布时间】:2016-07-15 23:20:12
【问题描述】:

我使用 ActionCable 创建了以下内容,但无法接收正在广播的任何数据。

评论频道

class CommentsChannel < ApplicationCable::Channel
  def subscribed
    comment = Comment.find(params[:id])
    stream_for comment
  end
end

JavaScript

var cable = Cable.createConsumer('ws://localhost:3000/cable');

var subscription = cable.subscriptions.create({
  channel: "CommentsChannel",
  id: 1
},{
  received: function(data) {
    console.log("Received data")
  }
});

连接正常,我可以在日志中看到以下内容:

CommentsChannel is streaming from comments:Z2lkOi8vdHJhZGUtc2hvdy9FdmVudC8x

然后我向该流广播:

ActionCable.server.broadcast "comments:Z2lkOi8vdHJhZGUtc2hvdy9FdmVudC8x", { test: '123' }

问题是永远不会调用received 函数。我做错了吗?

注意:我使用 actioncable npm 包从 BackboneJS 应用程序连接。

【问题讨论】:

  • config/cable.yml 中将电缆适配器从async 更改为redis 修复了它。

标签: ruby-on-rails actioncable


【解决方案1】:

config/cable.yml 中的电缆适配器从 async 更改为 redis 已为我修复。

更新

正如 Erem 在下面指出的,服务器和控制台是独立的进程,因此您需要使用集中式队列管理器。

【讨论】:

  • 太棒了,遇到了同样的问题。很高兴您发布了解决方案!为我工作。
  • @Artem 这对我不起作用。即使使用redis,广播也不起作用。服务器控制台说:“[ActionCable] 广播到 room_channel:{:message=>“llllllllllll”}”。但是接收到的函数没有被调用。我尝试了异步适配器和 redis 适配器。
  • 我不知道为什么它对你不起作用,但请确保redis服务器正在运行并且redis主机设置在cable.yml中。
  • 我假设您从您的 Rails 控制台进行广播?服务器和控制台正在使用隔离的进程。您需要有一个集中的队列管理器。你需要使用redis。
  • 也为我解决了。这么奇怪。谢谢@ArtemKalinchuk
猜你喜欢
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多