想知道如何在Node.js中设置客户端和服务器之间的持久连接。
持久连接应该能够从双方来回发送请求。看起来它需要有一个用于描述每个请求的机制,例如\r\n
如果请求是JSON,但如果之前已经完成,则不确定这里有哪些最佳实践。想知道网络套接字如何处理这个问题。
Mozilla说Keep-Alive不应该用于制作,所以想知道这是否仍然适用于HTTP2。
使用EventSource,您可以接收服务器事件,但想知道是否有办法添加客户端事件以发送到服务器。
最后,我想对WebSockets之类的双向通信进行简单的设置,但我不确定HTTP2中的最佳实践以及是否应该使用WebSockets。我宁愿尝试在没有websockets的情况下这样做。
答案 0 :(得分:3)
在充分尊重的情况下,我相信您错误地认为HTTP / 2连接是特定于页面的。
实际上,HTTP / 2连接通常是浏览器范围的连接。 HTTP / 2 push
无法知道哪个页面/选项卡将使用这些数据(可能不止一个)。
另外,请参阅讨论here,其中包含了为什么HTTP / 2不能(或不应该)用作Websocket备选方案的原因。
另一方面,如果HTTP / 2是“承诺”而Websockets不可用,则轮询可能是一种选择。
使用HTTP / 2进行轮询将比使用HTTP / 1.1进行轮询更加资源友好,即使由于额外的头和身份验证数据,它仍然比Websocket推送(或轮询)昂贵得多(它也会减少)安全,但这可能是没有人真正关心的事情。)
P.S。
HTTP / 2上的Websockets
这是一个非问题,除非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。就服务器端而言,我发现它们更易于管理和编码。