Rails 使用 ActionCable 开发 websocket 时遇到的问题

RIP-GitHub · 2021年02月20日 · 最后由 bighuzi 回复于 2021年02月22日 · 231 次阅读

可以在服务端看到这样的内容

[ActionCable] Broadcasting to message_channel: xxxx

但是前端连接 ws 接口时,却没有收到来自服务端的通知: xxx\ 目前前端已经可以连接服务端\ 连接成功时,服务端可以看到以下信息

Started GET "/adminapi/cable?authorization=2:zbiXF2xw8Qm-C9fmyBbp" for 172.18.0.1 at 2021-02-20 08:27:03 +0000
Started GET "/adminapi/cable/?authorization=2:zbiXF2xw8Qm-C9fmyBbp" [WebSocket] for 172.18.0.1 at 2021-02-20 08:27:03 +0000
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Registered connection (Z2lkOi8vbXlhcHAvVXNlci8y)

前端可以收到这样的推送消息

{"type":"welcome"}
{"type":"ping","message":1613808763}

可否贴下 app/channels/ 下的 xx_channel.rb 这些文件和前端监听的代码看看吗,有可能是因为 channel 名字写错之类的错误导致的

之前我也有弄了个 websocket, 看不知道能不能解决你的问题

var id_test = {channel: 'ImsChannel'} //表示进入的通道
var ws = new WebSocket("ws://127.0.0.1:3000/cable");
ws.onopen = function()
{
  // 第一次连接上command参数必须是subscribe订阅消息通道

  ws.send(JSON.stringify({command: "subscribe", identifier: JSON.stringify(id_test),

    data: JSON.stringify({action: "speak", content: "Hi everyone !"})

}));
};
需要 登录 后方可回复, 如果你还没有账号请 注册新账号