首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >服务器端的服务器发送事件成本

服务器端的服务器发送事件成本
EN

Stack Overflow用户
提问于 2013-01-09 06:57:14
回答 2查看 4.7K关注 0票数 21

如果我正确理解了服务器发送事件的原理,那么每次客户端注册到EventSource时,它实际上都会打开一个到管理该事件的资源的新的HTTP连接。与其他HTTP请求相反,连接保持活动状态,因此专用于此客户端的服务器进程/线程保持运行,直到客户端断开连接。

如果我们有1000个客户端连接到使用SSE的应用程序,该怎么办?仅仅为了处理SSE,我们会有1000个进程/线程(做同样的事情)并发运行吗?我想我错了,但如果我错了,它真的比通常的AJAX轮询方法更有效吗?在这种方法中,服务器至少不需要并发运行那么多进程/线程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-09 08:36:47

是的,每个客户端尽可能长时间地保持连接打开。在1000个并发用户的情况下,您将打开1000个TCP/IP连接。

但是,每个连接是否使用线程取决于服务器。

Apache通常为每个连接保持一个线程运行,因此这是非常昂贵的。对于Apache,最好禁用KeepAlive并使用轮询。

有了像node.js这样的基于事件的服务器,你可以只有一个进程来管理所有的连接,所以每个连接的成本要低得多,而且你应该能够轻松地保持数千个连接打开。

SSE最酷的一点是,您还可以使用它进行轮询。它具有retry:指令,该指令指定客户端在重新连接(轮询)之前应等待多长时间。当您想要轮询时,只需发送并关闭连接即可。

票数 23
EN

Stack Overflow用户

发布于 2013-01-09 08:38:14

这取决于服务器的线程模型。Apache默认为每个连接一个线程(或进程),因此,即使这些线程执行的工作不是很多(就像使用SSE连接所期望的那样),它们也会耗尽资源。

Nginx这样的服务器有一个稍微不同的模型,每个线程异步处理多个请求。所以像SSE和WebSockets这样的东西要高效得多。

Apache可用于perform more like Nginx和类似的服务器。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14225501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档