我们应该选择SSE+;使用HTTP/2时是否通过websocket休息?

我们应该选择SSE+;使用HTTP/2时是否通过websocket休息?,websocket,server-sent-events,http2,Websocket,Server Sent Events,Http2,当使用websocket时,我们需要一个专用的连接来进行双向通信。如果我们使用http/2,服务器会维护第二个连接 在这种情况下,使用websocket似乎会带来不必要的开销,因为使用SSE和常规http请求,我们可以在单个http/2连接上获得双向通信的优势 您认为呢?从web开发人员的角度来看,WebSocket和REST接口的区别在于语义。REST使用请求/响应模型,其中来自服务器的每条消息都是对来自客户端的消息的响应。另一方面,WebSocket允许服务器和客户端在任何时候推送消息,而与

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

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


您认为呢?

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

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


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

在一个多路复用的HTTP/2 TCP连接中使用两个流(一个流用于服务器到客户端的通信-(SSE),一个用于客户端到服务器通信和正常HTTP通信的流)与使用2个TCP连接(一个用于正常HTTP通信,一个用于WebSocket)进行比较并不容易

里程数可能因应用而异

头顶?当然,连接的数量增加了一倍。 但是,WebSocket可以压缩消息,而SSE不能

灵活性?如果连接是分开的,它们可以使用不同的加密。HTTP/2通常需要非常强的加密,这可能会限制性能。 另一方面,WebSocket不需要TLS

明文WebSocket在移动网络中起作用吗?根据我的经验,这要视情况而定。病毒使用、应用防火墙、移动运营商可能会限制WebSocket流量,或降低其可靠性,具体取决于您运营的国家/地区

API可用性?WebSocket是一种更广泛的部署和公认的标准;例如,在Java中有一个官方API(
javax.websocket
),另一个API正在出现(
Java.net.websocket

我认为SSE在双向web通信方面是一个技术上较差的解决方案,作为一种技术,它并没有变得非常流行(与WebSocket相比,没有标准API,没有书籍等)。 如果它被从HTML5中删除,我不会感到惊讶,我也不会错过它,尽管我在Jetty中


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

这在很大程度上取决于您想要实现哪种应用程序。如果您确实需要在服务器和客户端之间进行双向通信,那么WebSocket更合适,但您必须实现所有通信协议,并且可能无法得到所有it基础设施的良好支持(某些防火墙、代理或负载平衡器可能不支持WebSocket)。所以,如果您不需要100%双向链接,我建议将SSE与REST请求一起使用,以获取从客户端到服务器的附加信息。 但另一方面,SSE附带了某些警告,例如在Javascript实现中,不能覆盖头。唯一的解决方案是传递查询参数,但随后可能会遇到查询字符串大小限制的问题。 因此,再次强调,在SSE和WebSocket之间进行选择实际上取决于需要实现的应用程序类型。
几个月前,我写了一篇博客文章,可能会给你一些信息:。虽然当时我们没有考虑HTTP2,但这可以帮助你知道你需要问自己什么问题。

这些技巧可以像一个为性能目的而创建的所有历史技术一样在彗星框架中。我的问题与性能有关,并确保我了解这些技术。我同意开发人员从头开始实现它是很棘手的,但这不是我问题的目的。如果相关的话,这个技术应该被一个框架隐藏起来。谢谢。我认为SSE将越来越受HTTP/2的欢迎,因为它是与HTTP/2服务器推送功能相匹配的主要通知机制。每当密钥资源发生更改时,服务器可以推送更改,然后发送SSE事件,以便客户端可以从其缓存中检索更改。对于通知使用,负载大小将不足以需要压缩。