全双工通信的WebSocket

什么是WebSocket协议?

  • 建立在HTTP基础上的协议;
  • 连接的发起方仍是客户端;
  • 确立连接后,不管服务器还是客户端,任意一方都可直接向对方发送报文。

 

主要特点

  • 推送功能:服务器可直接发送数据,不必等待客户端请求
  • 减少通信量:只要建立WebSocket连接,就希望一直保持连接状态;且首部信息很小;
  • 握手:为了实现WebSocket通信,在HTTP连接建立后,需要完成一次握手;

 

与HTTP的主要差别

  • keep-alive是HTTP协议层面的长连接,不能主动推消息,主要是进行连接复用的
  • websocket是websocket协议的长连接,只要不断开,连接一直都在,而且服务端可以主动推消息

 

握手-请求

  • 用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变
  • Sec-WebSocket-Key字段内记录着握手过程中必不可少的键值
  • Sec-WebSocket-Protocol字段内记录使用的子协议

 

握手-响应

  • 对于之前的请求,返回状态码101 Switching Protocols的响应
  • Sec-WebSocket-Accept的字段值是由握手请求中的Sec-WebSocket-Key的字段值生成的
  • 成功握手确立WebSocket连接之后,通信时不再使用HTTP的数据帧,而采用WebSocket独立的数据帧
posted @ 2022-05-02 18:17  青山原  阅读(81)  评论(0编辑  收藏  举报