按照串行通信双方分工和信号传输方向,可以分为以下几种通信方式:
1. 单工通信(Simplex)
特点:单向传输,一方固定为发送端,另一方固定为接收端
数据流向:只能单向传输(A → B)
示例:广播、电视、遥控器(只能发送不能接收)、键盘到计算机

2. 半双工通信(Half-Duplex)
特点:双向传输,但同一时间只能单向传输
数据流向:可以双向传输,但不能同时(A ↔ B,分时进行)
工作机制:需要方向切换,有切换延迟
示例:对讲机、USB 1.0/2.0、某些RS-485通信

3. 全双工通信(Full-Duplex)
特点:双向同时传输
数据流向:可以同时双向传输(A ↔ B)
工作机制:通常需要两条独立的信道或频分复用
示例:电话、网线(以太网)、RS-232、USB 3.0+

详细对比表格
| 特性 | 单工 | 半双工 | 全双工 |
|---|---|---|---|
| 数据传输方向 | 单向 | 双向,分时 | 双向,同时 |
| 信道数量 | 1条 | 1条 | 2条(1条双向复用) |
| 同时性 | 不能同时收发 | 不能同时收发 | 可以同时收发 |
| 效率 | 低 | 中等 | 高 |
| 典型应用 | 广播、键盘 | 对讲机、RS-485 | 电话、以太网、RS-232 |
WebSocket全双工通信机制
实现了双方无缝的数据交换,不收请求响应模型的束缚。
特点:
- 握手升级
- 持续链接,握手成功就维持一个长期的TCP连接,避免了反复建立连接的开销
- 全双工通信
- 心跳机制。内置心跳机制,是web应用当中实时交互的关键技术。
支持的数据传输:
- 文本数据
- 二进制数据:arrayBuffer, arrayBufferView, blob
如何实现心跳机制:
- 定时发送心跳包
- 接收方响应确认
- 超时处理,维护超时定时器,
- 活动跟踪
- 灵活配置
如何保障实时通信的稳定性:
- 监听onclose事件,
- 状态码判断,检查event code判断关闭原因
- 心跳检测超时,主动监测连接状态
- 重连,使用递归重试、定时器控制、失败次数的限制
- 优化:延迟重连、错误处理、用户反馈
WebSocket如何处理跨域问题:
关键在于服务端的响应头设计,
- 设置access-control-allow-origin,在http响应头的该字段设置响应源
- CORS头部细化
- WebSocket handshake 在握手阶段处理跨域
- 跨域配置在服务端设置