如果我正确地理解了Server-Sent Events原则,每次客户端
注册到EventSource时,它实际上会打开一个新的HTTP连接到管理事件的资源.与其他HTTP请求相反,连接保持活动,因此专用于此客户端的服务器进程/线程将持续运行,直到客户端断开连接.
如果我们有1000个客户端连接到使用SSE的应用程序怎么办?我们有1000个进程/线程(做同样的事情)同时运行只是为了处理SSEs?我想我错了,但如果我不是,它是否比通常的AJAX轮询方法更有效率,至少服务器不需要同时运行多个进程/线程?
是的,每个客户端可以尽可能长地连接.有1000个并发
用户,您将有1000个TCP / IP连接打开.
但是,每个连接是否使用线程都取决于服务器.
Apache通常会为每个连接运行一个线程,所以它是相当昂贵的.使用Apache,最好禁用KeepAlive并使用轮询.
OTOH与基于事件的服务器,如node.js,您只需一个管理所有连接的进程,因此每个连接的成本要低得多,您应该能够容易地打开数千个连接.
关于SSE的很酷的事情是你可以使用它来进行投票.它具有retry:指令,指定在重新连接(轮询)之前客户端应等待多长时间.只要发送并关闭连接,当你想投票.