ruby-on-rails - 使用 websockets 连接到远程服务器

标签 ruby-on-rails ruby websocket actioncable

我想连接到通过 websockets ( ws:// ) 公开数据的外部服务器。在这种安排中,我的服务器将充当外部服务器的客户端。

ActionCable文档仅给出了 Rails 应用程序向 Javascript 客户端(通常是由 Rails 应用程序本身提供服务的前端)公开 websockets 的示例。它似乎没有显示意图在 Ruby 中打开 websocket 客户端的情况。

问题:

  • Rails 应用程序如何实例化 websocket 客户端以与另一台服务器通信?
  • 如果 Rails 没有通过 ActionCable 提供此功能,这怎么可能在纯 Ruby 中完成?
  • 搜索此问题的解决方案时可以找到一些未维护的开源项目(例如 https://github.com/websocket-rails/websocket-rails )。如 ActionCable不支持所描述的功能,哪些第三方 gem(如果有)被认为是标准的?
  • 最佳答案

    ActionCable 不提供构建服务器端客户端的功能。正如您在 repo 中看到的那样源代码中没有任何服务器客户端。但 ActionCable 使用 Faye WebSocket。所以与 gem 的连接 'faye-websocket'从服务器到 Action 电缆可能如下所示:

     EM.run {
       ws = Faye::WebSocket::Client.new("ws://localhost:3000/cable")
       ws.on :message do |e| puts e.data end
       ws.on :close do |e| puts 'close' end
     }
    

    因此,这显示了对 ping 和断开连接的 react 。但是连接到 channel 会出现一些问题。您可以尝试使用 Faye 构建 WebSocket,然后从 Faye Client 连接到该 WebSocket。

    但没有理由这样做。每个服务器已经在监听任何 HTTP 请求并在发生这种情况时触发一些方法。也没有理由一直听别的东西。此外,ruby 可以流式传输任何内容,并且可以通过 RestClient 轻松获取 - 也许这对您来说是更好的解决方案,而不是使用跨服务器 WebSocket

    关于ruby-on-rails - 使用 websockets 连接到远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205322/

    相关文章:

    ruby-on-rails - rails 3 : Form getting submitted twice

    ruby-on-rails - Capistrano 部署超时

    php - WebRTC 候选信息末尾的数据是什么?

    ruby-on-rails - Rails Habtm加入

    ruby-on-rails - Ruby 样式链接 :all

    ruby-on-rails - 即使照片确实上传,Carrierwave 也会返回 406 Not Acceptable

    django - AsyncWebsocketConsumer VS AsyncConsumer

    ruby - 在 Ruby 的情况下使用带正则表达式匹配的命名捕获……什么时候?

    ruby - 在 ruby​​ 脚本中使用 rufus scheduler

    javascript - 谷歌浏览器支持socket.io吗?