轮询和 Web 套接字中的连接

Posted

技术标签:

【中文标题】轮询和 Web 套接字中的连接【英文标题】:Connections in polling and web sockets 【发布时间】:2018-03-30 03:00:31 【问题描述】:

我对 Web 开发还很陌生,对一些概念感到困惑。具体来说,我不确定长轮询和网络套接字有什么区别。

长轮询是否涉及为每个请求启动一个到服务器的新 TCP 连接,或者是否存在一个持久的 TCP 连接来完成轮询?如果我理解正确,我认为 WebSockets 允许在服务器和客户端之间交换数据的持久 TCP 连接,并且标题中提到了此连接的持续时间。

任何 cmets/帮助将不胜感激。

【问题讨论】:

【参考方案1】:

长轮询是客户端向服务器发送 http 请求的地方。如果服务器有可用于请求的数据,它会立即将该数据作为 http 响应返回,并且连接完成。

如果服务器没有立即收到任何数据,那么它会在连接上挂起一段时间(设计为小于典型的客户端超时)。如果数据在时间限制之前到达,则与数据一起发送 http 响应并完成连接。

如果在时间限制到期之前服务器中没有新数据可用,则服务器返回一个响应,表示它还没有数据并且 http 套接字已完成。此时,客户端在新套接字上发出新请求并重新开始整个过程​​。

长轮询是否涉及为每个请求启动一个到服务器的新 TCP 连接,或者是否存在一个持久的 TCP 连接来完成轮询?

每次都有新连接。这就是轮询不是特别有效的原因。

如果我理解正确的话,我认为 WebSockets 允许在服务器和客户端之间交换数据的持久 TCP 连接,并且该连接的持续时间在标头中提到。

webSocket 被设计成一个持久连接,可以持续很长时间,然后客户端或服务器可以随时发送数据。与 http 请求相比,webSocket 连接有额外的设置,但一旦建立,它的效率会比长轮询高很多。

这些参考资料中解释了更多信息:

websocket vs rest API for real time data?

Long-polling vs websocket when expecting one-time response from server-side

html5 WebSocket: A Quantum Leap in Scalability for the Web

【讨论】:

以上是关于轮询和 Web 套接字中的连接的主要内容,如果未能解决你的问题,请参考以下文章

Web 套接字、长轮询、服务器发送事件和永久帧之间有啥区别?

浅谈WebsocketAjax轮询和长连接(long pull)

轮询和长轮询

轮询和长轮询优缺点分析

长轮询和长连接

websocket 双向概念是如何工作的?