使用websockets连接到远程服务器

时间:2018-05-06 23:07:31

标签: ruby-on-rails ruby websocket actioncable

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

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

问题:

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

1 个答案:

答案 0 :(得分:0)

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 Client。

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