当使用websocket时,我们需要一个专用的连接来进行双向通信。如果我们使用 http/2,我们就有由服务器维护的第二个连接。
在这种情况下,使用 websocket 似乎会带来不必要的开销,因为通过 SSE 和常规 http 请求,我们可以通过单个 HTTP/2 连接获得双向通信的优势。
你怎么认为?
在一个多路复用 HTTP/2 TCP 连接中使用 2 个流(一个流用于服务器到客户端通信 -服务器发送事件 http://www.w3.org/TR/eventsource/(SSE),以及一个用于客户端到服务器通信和正常 HTTP 通信的流)与使用 2 个 TCP 连接(一个用于正常 HTTP 通信,一个用于 WebSocket)的比较并不容易。
里程可能会根据应用程序而有所不同。
高架 ?嗯,连接数量肯定会增加一倍。
但是,WebSocket 可以压缩消息,而 SSE 则不能。
灵活性?如果连接是分开的,它们可以使用不同的加密。 HTTP/2 通常需要非常强的加密,这可能会限制性能。
另一方面,WebSocket 不需要 TLS。
明文 WebSocket 在移动网络中工作吗?根据我的经验,这取决于。防病毒软件、应用程序防火墙、移动运营商可能会限制 WebSocket 流量,或降低其可靠性,具体取决于您所在的国家/地区。
API 可用性 ? WebSocket 是一个更广泛部署和认可的标准;例如在Java中有一个官方API(javax.websocket
),另一个即将到来(java.net.websocket
).
我认为 SSE 对于双向 Web 通信来说是一种技术较差的解决方案,并且作为一项技术,它并没有变得非常流行(没有标准 API,没有书籍等 - 与 WebSocket 相比)。
如果它从 HTML5 中删除,我不会感到惊讶,而且我也不会错过它,尽管最早之一 https://github.com/jetty-project/jetty-eventsource-servlet to 实施它 https://github.com/eclipse/jetty.project/blob/master/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/EventSourceServlet.java在码头。
根据您的兴趣,您必须针对您的特定案例进行基准测试或评估技术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)