html5 – 服务器端的服务器发送事件成本

如果我正确地理解了Server-Sent Events原则,每次客户端注册到EventSource时,它实际上会打开一个新的HTTP连接到管理事件的资源.与其他HTTP请求相反,连接保持活动,因此专用于此客户端的服务器进程/线程将持续运行,直到客户端断开连接.

如果我们有1000个客户端连接到使用SSE的应用程序怎么办?我们有1000个进程/线程(做同样的事情)同时运行只是为了处理SSEs?我想我错了,但如果我不是,它是否比通常的AJAX轮询方法更有效率,至少服务器不需要同时运行多个进程/线程?

解决方法

是的,每个客户端可以尽可能长地连接.有1000个并发用户,您将有1000个TCP / IP连接打开.

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

Apache通常会为每个连接运行一个线程,所以它是相当昂贵的.使用Apache,最好禁用KeepAlive并使用轮询.

OTOH与基于事件的服务器,如node.js,您只需一个管理所有连接的进程,因此每个连接的成本要低得多,您应该能够容易地打开数千个连接.

关于SSE的很酷的事情是你可以使用它来进行投票.它具有retry:指令,指定在重新连接(轮询)之前客户端应等待多长时间.只要发送并关闭连接,当你想投票.

相关文章

HTML5和CSS3实现3D展示商品信息的代码
利用HTML5中的Canvas绘制笑脸的代码
Html5剪切板功能的实现
如何通过HTML5触摸事件实现移动端简易进度条
Html5移动端获奖无缝滚动动画实现
关于HTML5和CSS3实现机器猫的代码