0

我需要编写一个 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 处理。

4

2 回答 2

0

Ruby On Rails 也是一个异步框架。与瘦服务器。Node.js 或 Twisted 不是 Asynchrone 框架。只有事件框架。

在 ruby​​ 中,Event Framework 是 EventMachine,thin serverur 使用它。您可以使用 rack::middleware 创建一些 websocket 并使用它。

于 2010-10-20T17:25:25.103 回答
0

看看Juggernaut 2,它就是这样做的(而且它也使用节点)。我正在使用它将消息从我的服务器推送到所有连接的客户端,并且效果很好。实现起来轻而易举(尽管自述文件在某些​​方面有点不清楚),如果您需要任何帮助,请让我知道。

于 2010-12-07T22:37:11.450 回答