3

如何通过 websockets 判断 html5 消息有效负载长度?

我知道基本协议由一个操作码组成,然后长度由接下来的 1 到 8 个字节确定,然后以下值是散列值,其余的是有效负载!

我正在创建一个 java 服务器端应用程序,它将接收来自 html5 客户端的消息然后处理,我可以处理最多 256 个字节的消息。

即使是手动解决这个问题的任何帮助都会很棒(即如何处理确定有效负载的字节)

干杯

4

1 回答 1

7

Websocket 帧的有效负载长度可以通过三种方式进行编码,具体取决于有效负载的长度:

  1. 125 或更少
  2. 126-65535
  3. 65536 +

通过查看第 2 个字节的最后 7 位的值(第 2 个字节的第一个位是掩码标志)可以知道使用哪种方式。

当它低于 126 时,它是有效载荷长度。为 126 时,有效载荷长度在以下两个字节中。当它为 127 时,有效载荷长度在以下 8 个字节中。

因此,解释 websocket 帧必须遵循的算法是:

  1. 读取第一个字节(“ byte0”)以获取 fin 标志和操作码
  2. 读取第二个字节(“ byte1”)
  3. byte1大于 127 时,减去 127byte1并设置maskedtrue
  4. byte1现在是 126 时,读取接下来的两个字节并将其转换为short. 这是payload_length.
  5. byte1为 127 时,读取接下来的 8 个字节并将其转换为long. 这是payload_length.
  6. 什么时候byte1是别的东西,payload_length等于的值byte1
  7. masked为真时,读取下一个 4 字节。这是masking_key.
  8. 读取您拥有的字节数payload_length以获取有效负载。
  9. masked为真时,将 应用于masking_key有效负载。

websocket 框架中没有哈希码,你一定是搞混了。websocket 帧的完整性由其下方的 TCP 层确保。

有关 Websocket 协议的更多信息,请参阅RFC 6455

于 2013-08-16T21:36:47.210 回答