【发布时间】:2015-05-07 21:16:16
【问题描述】:
我正计划编写一个 Rails 应用程序,其中多个用户将使用带有 ActionController::Live 和 Puma 的服务器发送事件将更新信息推送给他们。我已经编写了一个测试应用程序,它似乎工作得很好。对于我正在做的事情,SSE 比 WebSockets 更有意义,因为大多数用户只是在“听”,而且 SSE 比设置 websockets-rails 更简单,这也取决于 Faye(在这种情况下,我会自己写Faye 之上的代码)。
我想知道 Rails 中服务器发送事件的可扩展性如何?这是在我将使用 Puma 的前提下,它为每个连接到 EventSource 的用户创建一个新线程。潜在地,这个应用程序旨在同时连接数十万用户,但 Puma 的默认线程限制是 16。我有什么理由不能将线程限制更改为 200,000?
【问题讨论】:
-
MS IE 中是否还缺少 SSE?
-
我认为 Rails/Puma 堆栈遇到的挑战与任何堆栈相同。线程/用户听起来像是矫枉过正,但我对您的用例了解不足,无法发表评论。增加 puma 使用的线程显然会增加 cpu 利用率,并且受到 CPU 数量的限制。 16 是一个很好的默认值。 200,000 个线程太多了。
-
@adi-pradhan 完全同意你的看法。 Python + gevent 很好地处理了这个问题,很好奇 Ruby 最好的方法。
-
Gene - 有一个适用于 IE 的 SSE 的 polyfill。 Adi - 如果这是真的,那么 Rails 中 SSE 的当前示例和教程不切实际吗?他们都建议使用带螺纹的 Puma;超过最大线程限制,除非释放线程,否则新用户无法连接。在这种情况下,16 似乎是一个微不足道的数字,因为这意味着只有 16 个用户可以连接到事件源或同时发出其他请求。这是并发的高昂代价。
标签: ruby-on-rails ruby multithreading server-sent-events puma