Websocket、Server Sent Events (SSE) 和 HTTP2 的 Server Pushing 有啥区别?

Posted

技术标签:

【中文标题】Websocket、Server Sent Events (SSE) 和 HTTP2 的 Server Pushing 有啥区别?【英文标题】:What is the difference between Websocket,Server Sent Events (SSE) and HTTP2's Server Pushing?Websocket、Server Sent Events (SSE) 和 HTTP2 的 Server Pushing 有什么区别? 【发布时间】:2017-03-02 15:52:12 【问题描述】:

谁能简要介绍一下这些看起来相似技术之间的区别?

Websocket 服务器发送事件 (SSE) HTTP2 的服务器推送

我知道所有这 3 个都是来自服务器的“推送”响应而不是客户端的请求。

乍一看,似乎一切都相同。我需要更清楚地了解差异。

【问题讨论】:

【参考方案1】:

Websockets:双向异步通信。到目前为止,HTTP/2 不能很好地工作,但正在努力做到这一点。 (例如WISH 和websockets2-over-http2。)

SSE:服务器可以通知浏览器事件。使用普通的 HTTP,即使使用 HTTP/2 也能很好地工作。可以通过常规 POST 请求从客户端向服务器发出通知,来模拟与 SSE 双向通信的异步通信,在 HTTP/2 中,这些请求与其他所有来自同一来源的请求进入同一个套接字,因此建立新连接的成本可以避免。但是,服务器端处理 POST 请求的处理成本可能高于使用本机 websocket。

HTTP/2 Push:与上述两者完全无关,它是一种服务器提前将资产推送到浏览器的机制。可能的应用:sending CSSs and javascripts while the php engine is creating the html。理论上,HTTP/2 Push 和 SSE 可以结合使用,使浏览器可以使用事件,而不会产生初始的往返延迟。

【讨论】:

这是一个很酷的简短版本......但它隐藏了陷阱和不准确之处,有利于提供一个很好的概述,还有更多信息here、here 和 here... 另外,通过在握手期间回退到 HTTP/1.1,Websockets 与 HTTP/2 完美配合。过去将 HTTP/2 与 Websockets 合并的努力已被放弃,尽管可能会有新的努力,但我不知道。 @Myst:请参阅 Daniel Stenberg 对我的回答所做的编辑。 WISH 和 websockets2-over-http2 正在 w3-wg 邮件列表中讨论。

以上是关于Websocket、Server Sent Events (SSE) 和 HTTP2 的 Server Pushing 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Server-sent-events与 WebSocket的区别是什么?

Websocket、Server Sent Events (SSE) 和 HTTP2 的 Server Pushing 有啥区别?

Html5 服务端推送 Server-Sent Event

Akka(43): Http:SSE-Server Sent Event - 服务端主推消息

WebFlux系列 Server-Sent Events

Server-sent Events