如何通过 websockets 判断 html5 消息有效负载长度?
我知道基本协议由一个操作码组成,然后长度由接下来的 1 到 8 个字节确定,然后以下值是散列值,其余的是有效负载!
我正在创建一个 java 服务器端应用程序,它将接收来自 html5 客户端的消息然后处理,我可以处理最多 256 个字节的消息。
即使是手动解决这个问题的任何帮助都会很棒(即如何处理确定有效负载的字节)
干杯
Websocket 帧的有效负载长度可以通过三种方式进行编码,具体取决于有效负载的长度:
通过查看第 2 个字节的最后 7 位的值(第 2 个字节的第一个位是掩码标志)可以知道使用哪种方式。
当它低于 126 时,它是有效载荷长度。为 126 时,有效载荷长度在以下两个字节中。当它为 127 时,有效载荷长度在以下 8 个字节中。
因此,解释 websocket 帧必须遵循的算法是:
byte0
”)以获取 fin 标志和操作码byte1
”)byte1
大于 127 时,减去 127byte1
并设置masked
为true
byte1
现在是 126 时,读取接下来的两个字节并将其转换为short
. 这是payload_length
.byte1
为 127 时,读取接下来的 8 个字节并将其转换为long
. 这是payload_length
.byte1
是别的东西,payload_length
等于的值byte1
masked
为真时,读取下一个 4 字节。这是masking_key
.payload_length
以获取有效负载。masked
为真时,将 应用于masking_key
有效负载。websocket 框架中没有哈希码,你一定是搞混了。websocket 帧的完整性由其下方的 TCP 层确保。
有关 Websocket 协议的更多信息,请参阅RFC 6455。