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

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

持久连接应该能够从双方来回发送请求。 似乎需要有一个机制来描述每个请求,比如\r\n如果请求是JSON,但是不知道如果之前已经完成了什么最佳实践, 想知道如何networking套接字处理这一点。

Mozilla说Keep-Alive不应该用在生产中,所以想知道HTTP2是否仍然适用。

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

最后,我希望有一个像WebSockets一样的双向通信的简单设置,但是我不确定HTTP2的最佳实践,以及是否应该使用WebSockets完成。 我宁愿尝试没有websockets这样做。

  • https://daniel.haxx.se/blog/2016/06/15/no-websockets-over-http2/

在所有的应有的尊重,我相信你是错误的假设HTTP / 2连接是页面特定的。

实际上,HTTP / 2连接通常是浏览器广泛的连接。 HTTP / 2 push不可能知道哪个页面/标签将使用数据(可能不止一个)。

此外,请参阅此处的讨论,其中包括为什么HTTP / 2无法(或不应该)用作WebSocket备选scheme的众多原因。

另一方面,如果HTTP / 2是“承诺”并且Websockets不可用,那么轮询可能是一个选项。

使用HTTP / 2进行轮询比使用HTTP / 1.1进行轮询的资源友好性要明显得多,尽pipe由于额外的头文件和身份validation数据,它仍然比Websocket推送(或轮询)要昂贵得多(这也会降低安全性,但这可能是没人真正关心的东西)。

PS

通过HTTP / 2的Websockets

这是一个非问题,除非HTTP / 1.1退休(实际上,恕我直言,这是故意和好的)。

的确,HTTP / 2连接不能被“升级”(改变)为Websocket连接,也不能通过Websocket数据,但这绝对没有意义。

新的Websocket连接使用现有的HTTP / 1.1升级握手,就是这样。

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

活着

Mozilla警告非标准的Keep-Alive 标题 。 但是,build议使用HTTP / 1.1(也是HTTP / 1.1客户端的默认设置)的Connection: keep-alive标准。

SSE (服务器发送事件)

上证所以前的Websockets,并没有得到太多的社会牵引力,而Websockets被采纳了复仇。

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

简单 – 发送一个HTTP请求。 回复可以与SSEasynchronous接收。

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