导轨。使用像 rest 一样的 web socket,但是有一个开放的连接
Posted
技术标签:
【中文标题】导轨。使用像 rest 一样的 web socket,但是有一个开放的连接【英文标题】:Rails. using a web socket like rest, but with an open connection 【发布时间】:2019-03-29 13:31:49 【问题描述】:我有一个 web api,可以在某些条件下将 json 发布到不同的外部端点。我们有一个新客户端,希望我们在事件期间打开与他们的 Web 套接字连接,当我们通过此套接字获取数据时向他们发送数据 (json),并在事件发生后关闭套接字。我很难弄清楚实现这一点的 rails 方式。
如何打开 Web 套接字连接并使其保持打开状态? (基本上客户会坐在哪里/定义会是什么样子)。
如何从控制器通过套接字发送消息? (例如,在处理一个 post 请求后将新数据发送到这个 websocket)
如何关闭连接?
【问题讨论】:
你在什么轨道上?轨道5?您可以使用 ActionCable 来实现 websockets @pibano,我认为 OP 正在询问成为 WebSocket 客户端(而不是服务器)。 如果是这种情况 OP 可以使用 javascript WebSocket @pibano -Myst 是的,我需要成为客户端,我需要通过 Web 套接字从 Rails 控制器发送数据。例如,当一个帖子(从 UI)进入时,控制器方法(在 ruby 中)的最后一步是通过 Web 套接字将 json 对象发送给其他人。我不关心响应,它只需要保持连接,直到我告诉它关闭。 所以你想在你的控制器中创建一个 websocket 连接?也有能力关闭连接? 【参考方案1】:您可以尝试使用名为 Faye 的 gem。下面是一个连接和发送数据的例子:(注:我没有测试过)
# Open the connection
ws = Faye::WebSocket::Client.new('ws://www.example.com/')
# Send data to connection
ws.send(YOURJSONDATA)
# Close connection (RFC 6455)
ws.close
给faye的注意事项:
Using the WebSocket client Adding headers and other options to connection WebSocket APIRFC 6455
希望对你有帮助!
【讨论】:
我真的建议使用iodine
而不是Faye
。 iodine 不仅支持开箱即用的 pub/sub(以及可选的 Redis 桥/引擎),而且它是 HTTP 服务器的一部分(而不是运行外部事件循环和 IO 管理模块)......再说一次,我我有偏见。以上是关于导轨。使用像 rest 一样的 web socket,但是有一个开放的连接的主要内容,如果未能解决你的问题,请参考以下文章