javascript - 如何使用带有 websocket-rails gem 的 channel.trigger 发送 channel 消息

标签 javascript ruby-on-rails ruby websocket

我正在构建一个简单的实时聊天应用程序来学习如何将 websockets 与 RoR 结合使用,但我不认为我了解 channel 的工作原理,因为它们没有按照我的预期进行。我可以使用 dispatcher.trigger() 方法成功地将消息发送到我的 Rails 应用程序,并使用我的 websocket Controller 向订阅该 channel 的所有客户端广播消息。一切正常。不起作用的是使用 channel (通过 channel.trigger() 方法)向其他客户端发送消息。 websocket-rails wiki 说...

Channel events currently happen outside of the Event Router flow. They are meant for broadcasting events to a group of connected clients simultaneously. If you wish to handle events with actions on the server, trigger the event on the main dispatcher and specify which controller action should handle it using the Event Router.

如果我理解正确,我应该能够使用 channel.trigger() 方法向连接到 channel 的客户端广播消息,而无需通过我的 RoR 应用程序路由消息,但它仍应到达其他连接的客户端。所以这是我的代码...

var dispatcher = new WebSocketRails('localhost:3000/websocket');
var channel = dispatcher.subscribe('channel_name');

channel.bind('channel_message', function(data) {
    alert(data.message);
});

$("#send_message_button").click(function() {
    obj = {message: "test"};
    channel.trigger('channel_message', obj);
});

使用上面列出的代码,我希望当我单击按钮时,它会使用 channel.trigger() 发送 channel 消息,并且 channel_message 绑定(bind)应该是在所有客户端上执行,显示一条显示为“测试”的警报。那不会发生。我正在使用 Chrome 工具检查 websocket 流量,它显示正在发送的消息...

["channel_message",{"id":113458,"channel":'channel_name',"data":{"message":"test"},"token":"96fd4f51-6321-4309-941f-38110635f86f"}]

...但是没有收到消息。我的问题是...

  1. 我是否误解了基于 channel 的 websocket 如何与 websocket-rails gem 一起工作?
  2. 如果不是,我做错了什么?

提前感谢您的智慧!

最佳答案

我能够根据 wiki 中的现成解决方案复制工作副本以及您自己的代码。

我已经打包了所有东西 here .您可能感兴趣的文件是 home_controller.rbapplication.jshome/index.html.erb

看来您对基于 channel 的 websockets 的理解是正确的。关于代码,请确保加载 websocket javascript 文件并将您的代码包含在 document.ready 中。如果没有后者,我遇到了与您完全相同的问题。

//= require websocket_rails/main

$(function() {
  // your code here...
});

让我知道它是否有效。祝你好运!

关于javascript - 如何使用带有 websocket-rails gem 的 channel.trigger 发送 channel 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25899521/

相关文章:

ruby-on-rails - 在 Rails 中使用相同部分时显示不同数据的最佳实践

ruby - 优雅地从数组创建哈希

ruby - 按小时将事件列表压缩到容器中,包括 "blank"个容器(Ruby)

javascript - settimeout 没有延迟

javascript - Redux 和 Angular 2

ruby-on-rails - rails 方式 : Formatting Value Before Setting it in the Model?

ruby-on-rails - 显示带有 rails 的版本之间的差异?

ruby-on-rails - 我如何清理这个 FactoryGirl 构建策略?

javascript - javascript 中的正则表达式正则表达式模式用于带逗号的输入

javascript - 如何从全局上下文(Coherent UI)调用 React 组件的功能