Websocket和TCP

时间:2018-10-24 05:27:30

标签: tcp websocket

据我所知,Websocket是基于消息的协议,并使用TCP作为传输层。但是TCP本身是基于流的协议。有人可以解释

  1. websocket消息如何在TCP中分段?
  2. Websocket中的框架是什么?
  3. 在Websocket中使用消息有什么优势?我从here看到,我问为什么WebSockets是基于帧的而不是基于流的?

如果我有任何误解,请纠正我。

1 个答案:

答案 0 :(得分:1)

要通过TCP发送特定的数据格式(例如webSocket框架),只需定义数据格式,以便流的读取者根据格式知道帧的开始和结束位置。一种典型的方法是发送一组数据,该数据包括固定大小(预先已知)的标头格式,该格式包含总帧的长度,然后发送该长度的其余帧。然后,阅读器可以读取初始的固定大小数据,从中读取长度,然后知道要读取多少以获得完整的帧。

  

Websocket中的框架是什么?

您可以了解整个webSocket框架here,下面是webSocket框架的结构。

Frame format:  
​​
      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-------+-+-------------+-------------------------------+
     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
     |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
     | |1|2|3|       |K|             |                               |
     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
     |     Extended payload length continued, if payload len == 127  |
     + - - - - - - - - - - - - - - - +-------------------------------+
     |                               |Masking-key, if MASK set to 1  |
     +-------------------------------+-------------------------------+
     | Masking-key (continued)       |          Payload Data         |
     +-------------------------------- - - - - - - - - - - - - - - - +
     :                     Payload Data continued ...                :
     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
     |                     Payload Data continued ...                |
     +---------------------------------------------------------------+
  

在Websocket中使用消息有什么优势?

目前还不清楚您要问什么。使用webSocket连接的原因包括:

  1. 随时可以将数据从服务器“推送”到客户端的功能。
  2. 非常低开销的方式可以随时从客户端向服务器或从服务器向客户端发送数据(重复数据包的开销比http请求低得多)。
  3. 具有持久连接的能力,通过该连接您可以执行许多操作,而不必使所有操作都符合http请求/响应格式。