gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:42 25 4
gpt4 key购买 nike

我正在构建一个简单的实时聊天应用程序来学习如何将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com