导轨。使用像 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 API

RFC 6455

希望对你有帮助!

【讨论】:

我真的建议使用iodine 而不是Faye。 iodine 不仅支持开箱即用的 pub/sub(以及可选的 Redis 桥/引擎),而且它是 HTTP 服务器的一部分(而不是运行外部事件循环和 IO 管理模块)......再说一次,我我有偏见。

以上是关于导轨。使用像 rest 一样的 web socket,但是有一个开放的连接的主要内容,如果未能解决你的问题,请参考以下文章

Spring restful API,是不是有像路由器一样使用的方法来获取其他方法端点或 URL?

向客户端呈现REST Web服务接口

包含问题或是不是在导轨中

如何更改动作电缆导轨中的 ping 间隔

如何链接 SOCKS 代理?

从导轨mongoid中查询大量键