我需要编写一个 Rails 应用程序 (JRuby),它在后台与另一个服务进行异步通信。每个浏览器会话需要一个连接。(实际上不需要是开放的 TCP 连接,但我需要在会话结束后释放资源。)与后台服务的通信不是严格的请求 - 响应。任何时候都可以从服务向 Rails 应用程序发送一条消息。
我还需要实现协议。我该怎么做呢?Ruby on Rails 是否有异步框架(例如 Twisted 或 Node.js)?我只需要一些起点。
我已经用 Python 编写了客户端协议的快速实现。事实上完整的协议是我自己编的(服务器是用JavaScript写的),所以我可以完全改变协议。但是,由于问题的性质,无法改变异步性质。
我还需要 XHR 轮询/WebSockets 以便将异步更改推送到浏览器。是否有针对此的 gem/howto/tutorial?我不能只将请求设置为睡眠(资源!)。
如果您想了解更多有关背景的信息:Rails 应用程序是一个可访问性工具。它与之通信的服务实际上是一个加载和呈现网页的 Firefox 插件。异步性质来自 (i) 框架、弹出窗口 ( window.open()
, window.alert()
, ...)、必须与 Rails 应用程序通信的 DOM 树的动态更改、重定向(如在论坛中摆姿势后)等。我需要使用 JRuby,因为我需要使用 Jena (Java) 框架进行 RDF 处理。