Websocket and TCP



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

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

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

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

什么是Websocket中的框架?

您可以在此处阅读有关整个 webSocket 框架的信息,并了解 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请求/响应格式。

最新更新