【问题标题】:how to work out payload size from html5 websocket如何从 html5 websocket 计算有效负载大小
【发布时间】:2013-08-17 05:42:02
【问题描述】:

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

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

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

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

干杯

【问题讨论】:

    标签: java html websocket byte payload


    【解决方案1】:

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

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

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

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

    所以解释 websocket 框架必须遵循的算法是:

    1. 读取第一个字节 ("byte0") 得到 fin 标志和操作码
    2. 读取第二个字节(“byte1”)
    3. byte1大于127时,将byte1减127,将masked设为true
    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

    【讨论】:

    • 是的对不起意味着屏蔽键,而不是散列
    • @OwainFormby 如果我的回答对您有帮助,请接受(旁边的勾号图标)。如果不明白,请告诉我你不明白的地方。
    • 不确定 Java 如何处理数据结构,但值得指出的是,您正在使用的是 BIG endian。所以当读取 2 或 8 个字节时有效载荷长度,您必须将其作为大端进行节制。否则你就完蛋了。
    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多