我正在试验Rails 4 ActionController :: Live和Server Sent事件.我使用的是MRI 2.0.0和Puma.
对于我可以看到,每个连接的客户端保持与服务器的活动连接.我想知道是否可以利用SSEs,而不保持所有响应流的运行.
美洲狮管理使用线程的多个连接,我想象连接数量有限制.
如果我想支持一个真实世界的场景,成千上万的客户端注册我的Rails应用程序的SSE活动?
有没有例子?
另外,我通常在Nginx反向代理后面运行Rails应用服务器.它需要任何特定的设置?
最佳答案
SSEs的构建方式是由客户端打开与服务器的连接,然后将该服务器打开,直到服务器发送一些数据.这是SSE规范的一部分,而不是ActionController :: Live的特定事项.它与长时间轮询有效相同,但是在返回第一位数据之后连接不被关闭,并且浏览器内置机制.
因此,可以实现的唯一方法是通过将多个开放的客户端连接到无限期坐在那里的网络服务器.至于需要什么资源来处理它们,我不确定,因为我还没有试图对此进行基准测试,但如果您拥有许多用户,那么Puma将需要足够的服务器来保持数千个连接一页打开
美洲狮的默认限制是16个并发连接.关于设置Rails的SSEs的几个博客帖子提到了这个更大的价值,但没有一个建议这个更高的值应该是什么.他们确实提到,DB连接的数量将需要相同,因为每个Rails线程都保持一个运行.听起来像一种昂贵的方式来运行东西.
“运行基准”是唯一的答案.
我没有评论反向代理,因为我没有尝试过,但是SSE是通过标准HTTP完成的,我不应该认为它需要任何特殊的设置.