繁体   English   中英

使用HTTP / 2时,我们是否应该优先选择SSE + REST而不是websocket?

[英]Should we prefer SSE + REST over websocket when using HTTP/2?

使用websocket时,我们需要一个专用的双向通信连接。 如果我们使用http / 2,我们有一个由服务器维护的第二个连接。

在这种情况下,使用websocket似乎会引入不必要的开销,因为使用SSE和常规http请求,我们可以通过单个HTTP / 2连接获得双向通信的优势。

你怎么看?

在一个多路复用HTTP / 2 TCP连接中使用2个流(一个用于服务器到客户端通信的流 - 服务器发送事件 (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中删除它我不会感到惊讶,我不会错过它,尽管它是第一个在Jetty中实现它的人之一。

根据您感兴趣的内容,您必须根据具体情况进行基准测试或评估技术。

从Web开发人员的角度来看,Websockets和REST接口之间的区别在于语义。 REST使用请求/响应模型,其中来自服务器的每条消息都是对来自客户端的消息的响应。 另一方面,WebSockets允许服务器和客户端随时推送消息,而与先前的请求无任何关系。

使用哪种技术取决于在您的应用程序环境中更有意义的内容。 当然,您可以使用一些技巧来模拟一种技术与另一种技术的行为,但通常最好在本书使用时更好地使用适合您的通信模型的技术。

服务器发送的事件是一项相当新的技术,尚未得到所有主流浏览器的支持,因此它还不是一个严肃的Web应用程序的选项。

这很大程度上取决于您要实现的应用程序类型。 如果您确实需要服务器和客户端之间的双向通信,WebSocket更合适,但您必须实现所有通信协议,并且所有IT基础架构可能都不能很好地支持它(某些防火墙,代理或负载平衡器可能不支持WebSockets) 。 因此,如果您不需要100%双向链接,我建议将SSE与REST请求一起使用,以获取从客户端到服务器的其他信息。 但另一方面,SSE带有一些警告,例如在Javascript实现中,你不能覆盖标题。 唯一的解决方案是传递查询参数,但是您可能会面临查询字符串大小限制的问题。 因此,在SSE和WebSockets之间进行选择实际上取决于您需要实现的应用程序类型。 几个月前,我写了一篇博文,可能会给你一些信息: http//streamdata.io/blog/push-sse-vs-websockets/ 虽然当时我们没有考虑HTTP2,但这可以帮助您了解自己需要问什么问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM