使用WebSockets连接到远程服务器

5

我想连接到通过 websockets (ws://) 提供数据的外部服务器。在这种情况下,我的服务器将作为客户端连接到外部服务器。

ActionCable 文档中只给出了一些例子,展示了 Rails 应用程序如何向 Javascript 客户端(通常是由 Rails 应用程序本身提供的前端)公开 websockets。文档似乎没有显示如何在 Ruby 中打开 websocket 客户端的情况。

问题:

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

我不知道数据格式,但你是否已经考虑过使用 Nokogiri? - iGian
1个回答

3

ActionCable并不提供构建服务器端客户端的功能。正如您可以在存储库中看到的那样,源代码中没有任何服务器客户端。但是ActionCable使用Faye WebSocket。因此,从服务器到ActionCable的连接可以像这样使用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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接