2013-08-16 22 views
1

如何通过websockets告诉html5消息有效载荷长度?如何从html5 websocket制定有效载荷大小

我知道基础协议由一个操作码组成,然后长度由下一个1到8个字节决定,那么下面的值是散列,然后剩下的是有效载荷!

我创建一个java serverside应用程序,将接收来自html5客户端的消息,然后处理,iI可以处理消息高达256字节。

任何帮助,甚至手动来解决这一问题将是巨大的(即如何habdle决定有效载荷的字节)

干杯

+0

有人吗?请.. –

回答

4

有三种方式的WebSocket帧的有效载荷长度如何能编码,这依赖于有效载荷的长度:

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

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

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

所以,你必须跟着来解释的WebSocket帧的算法是:

  1. 读取第一个字节(” byte0‘),以获得鳍标志和操作码
  2. 读第2个字节(’ byte1“)
  3. byte1大于127,从byte1减去127,并设置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

+0

对不起,意思是掩码键,不是哈希 –

+0

@OwainFormby当我的答案帮助你时,请接受它(它旁边的打勾图标)。当它不请你告诉我你不明白。 – Philipp

+0

不知道Java如何处理数据结构,但值得指出的是它是** BIG endian **您正在使用..所以当读取2或8个字节来指示有效载荷长度时,您必须将其作为大端。否则你被搞砸了。 – Torxed