长轮询 vs SSE vs WebSocket:实时通信怎么选

HttpAgent 对长轮询、Server-Sent Events 与 WebSocket 三种实时通信方式提供了统一支持。本文对比三者的原理、适用场景与选择建议。
HttpAgent 团队2026 年 7 月 20 日2 分钟读完

实时通信场景下,开发者常常在长轮询SSE(Server-Sent Events)WebSocket 之间犹豫。三者 HttpAgent 全部支持,且 API 风格一致:都是「构建器 + 事件处理器」。

三种方式对比#

维度长轮询 Long PollingSSEWebSocket
方向客户端轮询服务端 → 客户端单向双向全双工
协议普通 HTTPHTTP(text/event-stream)ws / wss 升级
代理/防火墙完全兼容兼容偶有拦截
适用低频更新、兼容优先AI 流式输出、消息推送聊天、游戏、协作

长轮询:兼容性最好的兜底方案#

请求发出后服务端挂起,直到有新数据或超时;客户端收到响应后立即发起下一次请求。

cs
await httpRemoteService.LongPollingAsync(    "https://api.example.com/events",    new HttpLongPollingBuilder()        .SetInterval(TimeSpan.FromSeconds(15))   // 轮询间隔        .SetOnResponse((response, token) =>        {            Console.WriteLine(response.StatusCode);            return Task.CompletedTask;        }));

SSE:AI 时代的主力军#

大模型流式输出(如 DeepSeek)正是 SSE 的典型场景:服务端持续推送 data: 事件,客户端逐 token 渲染。

cs
await httpRemoteService.ServerSentEventsAsync("https://api.deepseek.com/chat",    new HttpServerSentEventsBuilder()        .SetOnOpen(() => Console.WriteLine("已连接"))        .SetOnMessage((data, token) =>        {            Console.Write(data.Data);   // 逐段输出 AI 回复            return Task.CompletedTask;        }));

WebSocket:需要双向交互时#

聊天、在线协作、实时游戏等需要「客户端主动推 + 服务端主动推」的场景,WebSocket 是不二之选。

cs
var client = new WebSocketClient("wss://example.com/ws", options);client.OnMessage += (sender, e) => Console.WriteLine(e.Message);await client.ConnectAsync();await client.SendAsync("hello");

相关文章

声明式请求:接口即文档HttpAgent 声明式请求让 HTTP 接口定义直接成为 C# 接口:请求地址、方法、参数、标头全部由特性描述,支持继承与面向对象设计。2026 年 6 月 10 日 · HttpAgent 团队 · 约 1 分钟读完