gpt4 book ai didi

ruby-on-rails - 服务器发送的事件和 Rails Streaming

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:32 26 4
gpt4 key购买 nike

我正在试验 Rails 4 ActionController::Live 和 Server Sent Events。我正在使用 MRI 2.0.0 和 Puma。

就我所见,每个连接的客户端都与服务器保持事件连接。我想知道是否可以在不保持所有响应流运行的情况下利用 SSE。

Puma 使用线程管理多个连接,我想当前连接数是有限制的。
如果我想支持成千上万的客户注册到我的 Rails 应用程序以参加 SSE 事件的真实场景怎么办?

有没有例子?

此外,我通常在 nginx 反向代理后面运行 Rails 应用程序服务器。它需要任何特定的设置吗?

最佳答案

SSE 的构建方式是客户端打开到服务器的连接,然后保持打开状态,直到服务器有一些数据要发送。这是 SSE 规范的一部分,而不是特定于 ActionController::Live 的内容。它实际上与长轮询相同,但连接不会在第一位数据返回后关闭,并且使用浏览器内置的机制。

因此,实现它的唯一方法是让多个打开的客户端连接到无限期地坐在那里的网络服务器。至于处理它们需要什么资源,我不确定,因为我还没有尝试对此进行基准测试,但是如果你有那么多用户,它需要足够的服务器让 Puma 保持打开数千个连接打开一个页面。

puma 的默认限制是 16 个并发连接。几篇关于为 Rails 设置 SSE 的博客文章提到将此值提高到一个更大的值,但我发现没有一个建议这个更高的值应该是多少。他们确实提到数据库连接的数量需要相同,因为每个 Rails 线程都保持一个运行。听起来像是一种昂贵的运行方式。

“运行基准测试”确实是唯一的答案。

我无法对反向代理发表评论,因为我还没有尝试过,但由于 SSE 是通过标准 HTTP 完成的,我不认为它需要任何特殊设置。

关于ruby-on-rails - 服务器发送的事件和 Rails Streaming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com