快讯资讯
手机优化
系统数码
网络通信人工智能
网站游戏
测评专题
智车

  Long-Polling vs WebSockets,如       AMD豪掷49亿美元收购最大    

Long-Polling vs WebSockets,如何选择?

时间:2026-09-20 07:59 来源:未知 人气:

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 BlockingQueueString 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!"; } }

更多文章

相关文章

网站导航 | 快讯 | 资讯 | 手机 | 优化 | 系统 | 数码 | 网络通信 | 人工智能

  • 游戏 | 测评 | 专题 | 智车

    合作伙伴:

  • 友情链接(欢迎业界知名网站交换链接)申请友情

    

    声明:本站资源皆来自网络,如有侵权问题,请联系管理员处理!

    Copyright ©2020-2028快知站 版权所有 All rights reserved.

    闽ICP备20010713号-1 闽公网安备 35020602001684号