我在ruby和rails中编写应用程序。我试图将SSE用于用户通知。所有的工作,但我想在HTTP连接上做被动等待,不知道如何。我认为每个请求都在同一个线程上处理,这就是为什么当我打开连接并等待消息时,应用程序停止工作,因为服务器在另一个请求上等待。我该怎么做?一种方法是做一些被动等待的王,另一种方法是在其他线程上处理每个请求。知道如何解决这个问题吗?
答案 0 :(得分:0)
对于您尝试做的事情,更常见的术语和方法称为" comet"或长期投票。 SSE特定于HTML5,因此更新。我不确定是否有使用SSE的Rails解决方案,但是如果非Rails解决方案适合您,Goliath(构建在EventMachine之上)允许您轻松实现SSE。这是一个相当完整的教程:
https://www.igvita.com/2011/08/26/server-sent-event-notifications-with-html5/
如果你想使用Rails和Comet解决方案,我所知道的两个项目是轨道宝石(https://github.com/mallio/orbited)和Faye(http://faye.jcoglan.com/ruby.html)。
专门针对您关于应用程序停止运行的问题,这是因为您只运行一个进程,而应用程序在开发环境中一次只能处理一个连接。上述宝石通过使用消息传递服务器来管理打开的连接,将控制权返回给Rails应用程序(因此它不再阻塞)来缓解这种情况。在生产中,您可以在Apache / Nginx下启动10,20名工作人员,但这限制了您到那么多连接。