Rails SSE主动/被动等待

Rails SSE active / passive waiting

我正在 ruby 和 rails 中编写应用程序。我正在尝试使用 SSE 为用户发送通知。一切正常,但我想在 HTTP 连接上进行被动等待,但不知道如何操作。我认为每个请求都在同一个线程上处理,这就是为什么当我打开连接并等待消息时,应用程序停止工作,因为服务器等待另一个请求。我该怎么做?一种做被动等待之王的方法,另一种方法是在其他线程上处理每个请求。知道如何解决这个问题吗?

一个更常见的术语和方法称为 "comet" 或长轮询。 SSE 是 HTML5 特定的,因此更新。我不确定是否有使用 SSE 的 Rails 解决方案,但是如果您可以选择非 Rails 解决方案,Goliath(建立在 EventMachine 之上)允许您轻松实施 SSE。这是一个相当完整的教程:

https://www.igvita.com/2011/08/26/server-sent-event-notifications-with-html5/

如果您想使用 Rails 和 Comet 解决方案,我知道的两个项目是轨道 gem (https://github.com/mallio/orbited) and Faye (http://faye.jcoglan.com/ruby.html).

特别针对您关于应用程序停止工作的问题,这是因为您只有 运行 一个进程,并且该应用程序在开发环境中一次仅处理一个连接。前面提到的 gems 通过使用消息传递服务器来管理打开的连接,将控制权返回给 Rails 应用程序(因此它不再阻塞)来缓解这种情况。在生产中,您可以在 Apache/Nginx 下启动 10、20 个工人,但这限制了您只能连接那么多。