基于.NET 的WebSocket 的简单实例 --- 数据格式

上一篇我们已经在服务器和客户端之间建立起一个能双向通讯的途径,如果你马上按以前的经验直接丢送数据,恭喜,数据能过去,可你却根本不认识,这是自然,他的地盘他要做主,websocket 有其自己约定的数据格式,我们必须按照这个格式来才行的。

协议这玩意,很是枯燥,只能用,不能创新,但多了解一些这种规则,对以后我们定义传输协议有很强的参考价值,所以我们还是得认真瞧瞧。

 
打开:http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10
找到如下图所示的位置,这里面有详细的说明

 

具体每个字段的说明,大家可以慢慢啃英文,我们就讨论一下,如何将这玩意,在我们的系统中使用吧。

先用我的语言理解一下这个格式,有什么不正确欢迎大家指正。
这个格式中,最重要的就是第二个字节:

 

1.第一位决定是否有掩码,如果Mask为1,就会有后面那个4字节的Masking-Key,客户发送过来的数据,都有个这值,所以当我尝试发送一个空串过来的时候,服务器会收到类似如下的数据:(以2进制显示,方便大家了解)。

传输的数据,采用掩码的异或运算来产生,比如我发送一个字符1,服务器会收到如下数据:
1000 0001 1000 0001 0011 1100 1001 0111 0011 1001 1010 1111 0000 1101
如果Mask为0,则不会有后面的掩码

 

2.后7位是用来决定这个帧的长度,重点为原文中的这一句话:
Payload length:  7 bits, 7+16 bits, or 7+64 bits
如果这7位表示的长度小于126,则此即发送数据的实际长度
如果等于126,则后面两个字节表示长度,即7+16Bits的意思
如果等于127,则后面的8字节表示长度,即7+64Bits的意思
数据传输协议,就应该合理的使用每一个数据位,虽然感觉理解累些,但却能减少数据传输的数量,这就我们大设计协议的时候,应该好好学习的。
posted on 2015-11-20 15:33  到底是不是  阅读(568)  评论(0编辑  收藏  举报