了解WebSocket协议
WebSocket协议与交互
-
通讯流程
- 客户端和服务端首先要完成一次握手操作,这个握手是基于http调用完成的
upgrade
客户端首先向服务端发起一次请求,在header里会有一个upgrade
字段,它告诉服务端想升级成websocket协议。switching
服务端收到以后就会收到一个握手的确认,switching
意思就是 我允许你向websocket协议转换。一旦完成这个协商之后,客服端和服务端底层的TCP连接是没有中断的message
客服端可以向服务端发送message
消息message
服务端也可以向客户端发送message
消息
-
传输原理
- 协议升级后,继续复用 HTTP 的底层 socket 完成后续通讯
- message 底层被切分成多个 frame 帧传输
- 编程时只需操作 message,无需关心frame
- 框架底层完成TCP网络I/O,WebSocket协议解析,开发者无需关心
服务端技术选型和考虑
- NodeJS
- 单线程模型,推送性能有限。虽然可以多进程,但是想遍历在线用户集合,连接散列在多个进程上不方便做。
- Go
- 多线程,基于协程模型并发
- 成熟的WebSocket标准库,无需造轮子