Long-Polling(长轮询)和 WebSockets 是选择客户端和服务器之间实时通信的两种常见方法
,这篇文章 ,选择我们将探讨这两种技术的选择区别、各自的选择架构、优点、选择缺点以及适用的选择使用场景。

一、选择什么是选择实时通信 ?
实时通信指的是服务器能够在信息可用时立即推送给客户端,而无需客户端显式请求。云计算选择
这与传统的选择 HTTP请求-响应模型形成对比
,在传统模型中,选择客户端必须始终发起通信,选择而长轮询和 WebSockets可以克服这种限制。选择
客户端和服务器之间的选择实时通信对于聊天应用程序、体育赛事直播、选择股票行情
、在线游戏和协作工具等应用程序至关重要
。
二、长轮询
长轮询是指客户端向服务器发送 HTTP请求
,服务器保持该请求直到有新数据可用 ,一旦服务器有新数据
,它会响应客户端,源码库客户端立即发送新请求 。这样就创建了一个持续的连接以实现实时更新。
1.工作原理客户端向服务器发送请求
。服务器不会立即响应,而是保持请求并等待数据可用。当数据可用时(或在超时后) ,服务器响应请求
。客户端立即发送另一个请求 ,重新开始该过程。2.优点简单性
:易于使用标准HTTP基础设施实现
。兼容性
:无需额外配置即可与现有防火墙和代理服务器配合工作。备选方案:可以作为不支持 WebSockets的环境中的备选方案。亿华云3.缺点延迟 :由于需要建立新的 HTTP连接,延迟较高。开销
:频繁的 HTTP请求和响应带来较高的开销 。可扩展性:由于大量打开的 HTTP连接和服务器资源消耗 ,难以扩展。4.何时使用长轮询?当你需要支持不支持 WebSockets的旧浏览器或环境时。对于更新不频繁,近实时足够的应用程序 。使用不支持 WebSockets的现有基础设施时 。模板下载对于简单应用程序,不需要 WebSockets的复杂性 。5.示例如下示例代码,用 Java模拟了一个长轮询的方式 ,当服务器接收到客户端的请求时,服务器会将请求写入
复制import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @RestController public class LongPollingController { // 用于存储消息的队列 private final BlockingQueue<String> messageQueue = new LinkedBlockingQueue<>(); // 模拟一个接收消息的端点 @GetMapping("/receive") public String receive() throws InterruptedException { // 如果队列为空,等待新的消息 return messageQueue.take(); } // 模拟一个发送消息的端点 @GetMapping("/send") public String send(String message) { messageQueue.offer(message); return "Message sent!"; } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24. 三、WebSockets
WebSockets提供了一个全双工通信通道,通过单一的香港云服务器