avatar

Wang's Blog

Be Open, Share Knowledge, Keep Learning

  • 首页
  • 数理基础
  • 宇宙机
  • LLM
  • 管理与经济
  • 游戏
Home 实时通信技术
文章

实时通信技术

Posted 2025-09-28 Updated 2025-09- 30
By Administrator
24~32 min read

技术特性对比表

技术

协议

方向性

复杂度

延迟

适用场景

短轮询

HTTP

双向(伪)

低

高

简单状态检测

长轮询

HTTP

双向(伪)

中

中

即时消息

WebSocket

WS

全双工

高

低

游戏/高频交易

SSE

HTTP

单向(服务端→客户端)

低

低

实时通知/日志流

短轮询

长轮询

Websocket

真正的全双工的、基于TCP的协议

Websocket连接建立

浏览器在TCP三次握手建立连接后,统一使用HTTP协议先进性一次通信。

  • 如果此时是普通的HTTP请求,那后续双方就还是老样子继续用普通HTTP协议进行交互,这点没啥疑问。

  • 如果这时候是想建立websocket连接,就会在HTTP请求里带上一些特殊的header头。

Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: T2a6wZlAwhgQNqruZ2YUyg==\r\n

这些header头的意思是,浏览器想升级协议(Connection: Upgrade),并且想升级成websocket协议(Upgrade: websocket)。

同时带上一段随机生成的base64码(Sec-WebSocket-Key),发给服务器。

如果服务器正好支持升级成websocket协议。就会走websocket握手流程,同时根据客户端生成的base64码,用某个公开的算法变成另一段字符串,放在HTTP响应的 Sec-WebSocket-Accept 头里,同时带上101状态码,发回给浏览器。

Websocket的消息格式

上面提到在完成协议升级之后,两端就会用webscoket的数据格式进行通信。

数据包在websocket中被叫做帧。

opcode字段:这个是用来标志这是个什么类型的数据帧。比如。

  • 等于1时是指text类型(string)的数据包

  • 等于2是二进制数据类型([]byte)的数据包

  • 等于8是关闭连接的信号

payload字段:存放的是我们真正想要传输的数据的长度,单位是字节。比如你要发送的数据是字符串"111",那它的长度就是3。



Websocket的使用场景

websocket完美继承了TCP协议的全双工能力,并且还贴心的提供了解决粘包的方案。它适用于需要服务器和客户端(浏览器)频繁交互的大部分场景。比如网页/小程序游戏,网页聊天室,以及一些类似飞书这样的网页协同办公软件。

SSE(Server-Sent Events)

宇宙机
License:  CC BY 4.0
Share

Further Reading

May 22, 2025

C++

Github https://github.com/HappynessI/review-material.git 百度网盘 https://pan.baidu.com/s/1126SzftiswpK6n7Ciu99Cg?pwd=1895 微北洋 #MP262207

Dec 3, 2025

数据仓库复习整理

【注】:与ai对话的提示词可以在https://github.com/HappynessI/Prompts_For_All_Work/blob/main/System%20Prompt/Review%20for%20exams找到 【注】:资料在:https://pan.baidu.com/s/10

Sep 28, 2025

实时通信技术

技术特性对比表

OLDER

LangChain框架学习

NEWER

MCP(1)——MCP概述

Recently Updated

  • C++
  • Hello World
  • 数据仓库复习整理
  • 代码阅读与运行1
  • 大模型入门(6)——Agent、MCP、FunctionCall

Trending Tags

Halo 前端 强化学习 Python obsidian

Contents

©2026 Wang's Blog. Some rights reserved.

Using the Halo theme Chirpy