繁体   English   中英

HTTP2-如何具有类似WebSocket的功能(Keep-Alive,EventSource等)

[英]HTTP2 - How to have WebSocket-like functionality (Keep-Alive, EventSource, etc.)

想知道如何在Node.js中建立客户端和服务器之间的持久连接。

持久连接应该能够从双方来回发送请求。 似乎需要一种描述每个请求的机制,例如,如果请求是JSON,则为\\r\\n ,但是如果之前已经完成,则不确定此处的最佳做法是什么。 想知道网络套接字如何处理此问题。

Mozilla称Keep-Alive不应在生产中使用,因此想知道HTTP2是否仍然适用。

使用EventSource可以接收服务器事件,但是想知道是否存在添加客户端事件以发送到服务器的方法。

最后,我想为双向通信(如WebSockets)设置一个简单的设置,但是不确定HTTP2中的最佳实践以及是否应该使用WebSockets完成。 我宁愿尝试不使用websockets来执行此操作。

出于所有应有的尊重,我认为您误以为HTTP / 2连接是特定于页面的。

实际上,HTTP / 2连接通常是浏览器范围的连接。 HTTP / 2 push无法知道哪个页面/选项卡将使用数据(可能不止一个)。

另外,请参阅此处的讨论,其中包括无数原因说明为何不能(或不应)将HTTP / 2用作Websocket的替代方案。

另一方面,如果“应许”了HTTP / 2并且Websockets不可用,则可以选择轮询。

尽管由于额外的标头和身份验证数据,与使用HTTP / 1.1进行轮询相比,使用HTTP / 2进行轮询仍将比使用Websocket推送(或轮询)昂贵得多,但与使用HTTP / 1.1进行轮询相比,资源友好性将大大提高(这也会降低安全性,但是这可能是没人真正在乎的事情)。

PS

通过HTTP / 2的Websocket

除非退出HTTP / 1.1,否则这不是问题(实际上,恕我直言,这是有意的,也是很好的)。

的确,不能将HTTP / 2连接“升级”(更改)为Websocket连接,也不能通过隧道传输Websocket数据,但这绝对没有任何意义。

新的Websocket连接使用现有的HTTP / 1.1升级握手,仅此而已。

任何支持Websockets的HTTP / 2服务器都将支持握手。

活着

Mozilla警告不要使用非标准的Keep-Alive 标头 但是,绝对建议使用HTTP / 1.1的Connection: keep-alive标准(这也是HTTP / 1.1客户端的默认设置)。

SSE (服务器发送事件)

SSE早于Websockets,它们在社区中没有多少吸引力,而Websockets被报复了。

想知道是否有添加客户端事件以发送到服务器的方法

简单-发送HTTP请求。 可以使用SSE异步接收答复。

我更喜欢Websockets。 就服务器端而言,我发现它们更易于管理和编码。

暂无
暂无

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

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