如何通过 websocket 得知 html5 消息有效负载长度?
我知道基本协议由操作码组成,然后长度由接下来的 1 到 8 个字节确定,然后以下值是散列,然后其余的是有效负载!
我正在创建一个java服务器端应用程序,它将从html5客户端接收消息然后进行处理,我可以处理最多256字节的消息。
任何手动解决这个问题的帮助都会很棒(即如何处理确定有效负载的字节)
Cheers
Websocket 帧的有效负载长度可以通过三种方式进行编码,这取决于有效负载的长度:
- 125 或以下
- 126-65535
- 65536 +
使用哪种方式可以通过查看第二个字节的最后 7 位的值来判断(第二个字节的第一位是掩码标志)。
当它低于126时,它是有效负载长度。
当它是126时,负载长度在下面的两个字节中。
当它是127时,有效负载长度在接下来的8个字节中。
因此,解释 websocket 帧时必须遵循的算法是:
- 读取第一个字节(“
byte0
") 获取 fin 标志和操作码
- 读取第二个字节(“
byte1
")
- when
byte1
大于 127,减去 127byte1
并设置masked
to true
- when
byte1
现在是 126,读取接下来的两个字节并将其转换为short
。这是payload_length
.
- when
byte1
是127,读取接下来的八个字节并将其转换为long
。这是payload_length
.
- when
byte1
是别的东西,payload_length
等于byte1
- when
masked
为真,读取下一个 4 字节。这是masking_key
.
- 读取您拥有的字节数
payload_length
获取有效负载。
- when
masked
是真的,应用masking_key
到有效负载。
Websocket 框架中没有哈希码,您一定混淆了某些内容。 Websocket 帧的完整性由其下方的 TCP 层确保。
有关Websocket协议的更多信息,请参阅RFC 6455.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)