javascript - 为什么 Websockets 比服务器发送事件快

嗨,我目前遇到了 this paper,我不明白为什么服务器发送的事件在将数据从服务器推送到客户端时速度较慢。

我可以看到,由于 XHR 的 HTTP 开销,SSE 对于像聊天应用程序这样的双向通信速度较慢。

最佳答案

我认为这里结合了两种影响导致 WebSockets 比 SSE“更快”的说法。

效果 1:SSE 的 Payload 与 Message 比率较低
正如您所指出的,在双向通信模式中,与使用 WebSockets 的更紧凑的有效负载和谨慎的协议(protocol)设计相比,HTTP 请求/响应的开销通常更大。

效果 2:SSE 可能涉及 Session Reconnections
正如@alexsergeyev 正确指出的那样,SSE session 可以重新连接,但在大多数现代浏览器中,这仅意味着使用池化 TCP 连接重新创建 SSE session ,因此对

结合这两种效果,并以字节/秒为单位定义吞吐量作为指标,我希望我们可以看到,即使对于服务器到客户端的单向通信,由于这两种效果,WebSockets 的吞吐量也更好。

据我所知,随着 WebSocket 感知中介的普及,SSE 的作用将随着时间的推移而减少。现在,如果您的安全故事依赖 HTTP,除非您有硬实时要求,否则您可能会选择 SSE。如果这样做,Kaazing Enterprise WebSocket 网关为大多数安全系统内置了 SSO 集成。