长轮询和 WebSocket 的区别
长轮询和 WebSocket 都是用于客户端和服务器之间实时数据传输的技术。它们提供了一种让客户端实时接收服务器更新的方式,从而实现更具互动性和响应性的 Web 应用程序。它们之间的主要区别在于,长轮询将请求发送到客户端或接收方并等待响应,这意味着单向通信。另一方面,WebSocket 用于同时双向发送数据。
什么是长轮询?
在长轮询中,服务器会保持连接处于活动状态,直到它有信息发送回客户端。这使得无需客户端反复向服务器发出请求即可实现实时更新。这项技术很方便,并且所有 Web 浏览器都支持。这意味着如果客户端和服务器之间的连接断开,它可能不会自动重新连接。
客户端向主机或发射器发送请求并等待响应。服务器保持连接打开,直到它有数据发送回客户端。客户端收到响应后,会向服务器发送另一个请求,然后该过程重复。
长轮询技术的优点
它适用于小型任务,并且易于实现。
它几乎总是由设备辅助。
浏览器无需重复发送查询来确定其请求的状态。
由于它不向服务器发送重复的查询(这会浪费资源),因此它比原始轮询策略更有效。
长轮询技术的缺点
它比 WebSocket 连接消耗更多的服务器资源。
由于服务器和设备之间有多个跳跃,因此可能存在延迟开销。
长轮询可能存在可靠的消息排序问题,因为一个客户端可能同时发送多个 HTTP 请求。
如果同一个客户端向服务器建立多个连接,则无法保证消息排序。如果客户端无法接收消息,则可能存在消息丢失。
什么是 WebSocket?
客户端和服务器可以使用 WebSocket 协议进行双向通信。换句话说,数据可以同时发送和接收,而无需进一步的 HTTP 请求。建立的 WebSocket 连接将保持活动状态,直到客户端或服务器关闭它。这使得实时数据传输成为可能,并且客户端不再需要定期向服务器发出请求。
数据包用于在客户端和服务器之间传输数据。这些数据包可以双向发送,并且可以包含任何类型的数据。因此,客户端和服务器之间的通信是有效且实时的。
WebSocket 的优点
它支持双向通信,允许同时发送和接收数据。
与 HTTP 相比,我们可以使用 WebSocket 更快地转发和传递数据。
WebSocket 允许跨源通信,但与此相关的安全问题。
由于 WebSocket 的开销低于 HTTP,因此它更有效。虽然 WebSocket 仅使用 2 字节的开销,但 HTTP 可以使用多达 2000 字节。
WebSocket 的缺点
与 HTTP 相比,WebSocket 不支持客户端和服务器之间的缓存存储。
如果应用程序不需要大量动态交互,则 HTTP 的开发要容易得多。
长轮询和 WebSocket 的区别
基本参数 |
长轮询 |
WebSocket |
---|---|---|
通信 |
一次只能进行一种数据传输,称为半双工 |
但数据可以双向发送,称为全双工。 |
连接 |
长轮询使用多个 HTTP 连接来发送和接收数据。 |
WebSocket 使用单个 TCP 连接来发送和接收数据 |
数据传输 |
使用长轮询,数据将从服务器发送到相应的客户端,而无需客户端请求 |
使用 WebSocket,数据可以随时从服务器发送到相应的客户端,而无需客户端请求。 |
延迟 |
由于需要多个 HTTP 请求来发送和接收数据,因此长轮询的延迟较高。 |
由于使用了单个 TCP 连接,因此 WebSocket 的延迟较低。 |
资源使用 |
它比 WebSocket 更占用服务器资源,因为它需要多个 HTTP 连接。 |
它对服务器的资源消耗较少,因为它使用单个 TCP 连接。 |
浏览器支持 |
所有 Web 浏览器都支持长轮询。 |
WebSocket 需要支持 HTML5 的现代 Web 浏览器。 |
结论
长轮询和 WebSocket 用于在两个设备之间或从发射器到接收器之间有效地共享或发送数据。使用 WebSocket 的实时应用程序之一是 WhatsApp 和 Telegram,因此可以及时传递消息。