【问题标题】:Connecting to a remote server using websockets使用 websockets 连接到远程服务器
【发布时间】:2018-05-06 23:07:30
【问题描述】:

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

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

问题:

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

【问题讨论】:

  • 我不知道数据格式,但是您是否已经考虑过Nokogiri?

标签: ruby-on-rails ruby websocket actioncable


【解决方案1】:

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

 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 和断开连接的反应。但是与频道的连接会有一些麻烦。您可以尝试使用 Faye 构建 WebSocket,然后从 Faye 客户端连接到该 WebSocket。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多