【问题标题】:Ruby server side Websocket clientRuby 服务器端 Websocket 客户端
【发布时间】:2020-02-07 20:56:38
【问题描述】:

最近我一直在试验 ruby​​ 和 websockets。所以我用 ActionCable 创建了一个新的 Rails 5 项目,一切似乎都可以正常工作。

但我还用Faye's ruby websocket client 创建了一个ruby 纯脚本。与互联网上的大多数教程不同,我想尝试服务器端(作为客户端)脚本,而不是 HTML 文件中的前端 JS 脚本。

所以我尝试了它的基本用法,我成功地使握手正确执行,但我无法继续测试,因为在连接到 Rails 服务器中公开的所需频道后,我无法确定在哪里订阅。

这是我的 ruby​​ 脚本代码:

require 'faye/websocket'
require 'eventmachine'

EM.run {
  ws = Faye::WebSocket::Client.new('ws://localhost:3001/cable',nil,{
    headers: {'Origin' => 'ws://localhost:3001/cable'}
  })

  ws.on :open do |event|
    p [:open]
    ws.send({data: 'hello'})
  end

  ws.on :message do |event|
    p [:message, event.data]
  end

  ws.on :close do |event|
    p [:close, event.code, event.reason]
    ws = nil
  end

  ws.on :error do |event|
    p [:close, event.code, event.reason]
    ws = nil
  end

  ws.send({data: 'yoyoyooy'}) # This gets sent to nowhere..
  # I was hoping into subscribing a channel and callbacks for that channel, something like:
  # ws.subscribe('my-channel',receive_message_callback,error_callback)
}

在 actioncable 方面,我的连接类确实触发了 connect 方法,但我仍然不确定如何与通道交互。就像从客户端订阅一样,我可以开始发送和接收消息。

【问题讨论】:

  • 仅供参考:如果您对 WebSockets(而不是 Rails 风格 - ActionCable)感兴趣,您可以尝试其他 WebSocket 方法,包括 Faye 服务器、碘等。就我个人而言,当我为我的 WebSocket 需求编写碘时,我有偏见。

标签: ruby-on-rails ruby websocket actioncable


【解决方案1】:

通过阅读 websocket action cable client gem 的自述文件,我意识到任何 websocket 都可以完成这项工作,我只需要根据 ActionCable 的需要在 send 方法中发送正确的有效负载。在这种情况下:

ws.send {"command":"subscribe","identifier":"{\"channel\":\"#{channel}\",\"some_id\":\"1\"}"}.to_json

题外话:我在rails overview page 中找不到这个我只需要搜索ActionCable Protocol

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多