Skip to content

了解WebSocket协议

WebSocket协议与交互

  • 通讯流程

    Image title
    通讯流程

    1. 客户端和服务端首先要完成一次握手操作,这个握手是基于http调用完成的
    2. upgrade 客户端首先向服务端发起一次请求,在header里会有一个 upgrade 字段,它告诉服务端想升级成websocket协议。
    3. switching 服务端收到以后就会收到一个握手的确认,switching意思就是 我允许你向websocket协议转换。一旦完成这个协商之后,客服端和服务端底层的TCP连接是没有中断的
    4. message 客服端可以向服务端发送 message 消息
    5. message 服务端也可以向客户端发送 message 消息
  • 传输原理

    1. 协议升级后,继续复用 HTTP 的底层 socket 完成后续通讯
    2. message 底层被切分成多个 frame 帧传输
    3. 编程时只需操作 message,无需关心frame
    4. 框架底层完成TCP网络I/O,WebSocket协议解析,开发者无需关心

服务端技术选型和考虑

  • NodeJS
    1. 单线程模型,推送性能有限。虽然可以多进程,但是想遍历在线用户集合,连接散列在多个进程上不方便做。
  • Go
    1. 多线程,基于协程模型并发
    2. 成熟的WebSocket标准库,无需造轮子