【问题标题】:Queuing in tandem with a Ruby Web socket server与 Ruby Web 套接字服务器串联排队
【发布时间】:2012-05-22 22:43:00
【问题描述】:

我正在使用 jruby on rails 编写应用程序。应用程序的一部分从网页启动一个长时间运行的进程。在某些情况下,长时间运行的过程可能会持续 20 分钟,但在大多数情况下,就时间而言,它的寿命会超过网页响应。如果用户关闭浏览器,我也希望这项工作能够继续。长时间运行的进程将在运行时将记录添加到数据库中。

我想在网页上给出插入数据库的可视指示,我更喜欢使用 Web 套接字而不是轮询数据库以获取插入。

我正在考虑使用队列处理程序将消息发送到 resque 队列,该队列处理程序将确保在用户关闭浏览器时完成作业。队列处理程序将执行插入到数据库中。

我正在考虑使用 EM-WebSocket 作为我的 websocket 服务器。

我遇到的问题是:

resque 进程和 EM-WebSocket 进程之间如何通信?我想以某种方式将新插入的详细信息从 resque 进程传递到数据库中,并传递给将与浏览器通信的 EM-WebSocket 实例?

任何人解决了这样的问题或任何想法我可以如何做到这一点?

【问题讨论】:

  • 您是否考虑过将结果添加到 Redis 队列并在 Rails 应用程序中观察该队列?假设您使用的 Redis 库能够从这样的队列中观察/观看/弹出元素。
  • 这实际上看起来是一个很好的起点blog.0x82.com/2009/12/28/…
  • 是的,这就是我的意思,使用队列。

标签: ruby jruby resque eventmachine


【解决方案1】:

我实际上正在研究一种使这变得非常简单的宝石。现在它很裸露,但它确实有效。 https://github.com/KellyMahan/RealTimeRails

它运行一个事件机服务器来监听更新,并利用 em-websockets 将这些更新发送到浏览器。

它的目的是通过 after_save 调用来监视活动记录更新,该调用告诉事件机器服务器它有一个带有 id 的模型的更新。然后它将模型和 id 与特定通道匹配,以向 Web 套接字服务器上的连接发送消息。当浏览器收到更新通知时,它会调用 ajax 来检索最新结果。

仍在进行中,但它可以帮助您。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多