Websocket协议的浅入解析-迷惑笔记

一、简析

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成握手。

二、WebSocket和HTTP的关系

6651f2f811ec133b0e6d7e6d0e194b4c_b

 

HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过上图理解。

Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。。

 

三、WebSocket特点

1、HTTP简析

HTTP是一种非持久化连接,生命周期通过request和response来界定,且request=response。

2、WebSocket

WebSocket是持久化协议。

四、WebSocket握手过程:

Web客户端,请求HTTP Header信息:

Web服务端响应:

五、WebSocket数据包分析

WebScoket协议中,数据以帧序列的形式传输。考虑到数据安全性,客户端向服务器传输的数据帧必须进行掩码处理。服务器若接收到未经过掩码处理的数据帧,则必须主动关闭连接。
服务器向客户端传输的数据帧一定不能进行掩码处理。客户端若接收到经过掩码处理的数据帧,则必须主动关闭连接。
针对上情况,发现错误的一方可向对方发送close帧(状态码是1002,表示协议错误),以关闭连接。

帧协议:

20150506112726561

六、WebSocket消息分片

分片目的是发送长度未知的消息。如果不分片发送,即一帧,就需要缓存整个消息,计算其长度,构建frame并发送;使用分片的话,可使用一个大小合适的buffer,用消息内容填充buffer,填满即发送出去。

 

 

附加:

1、Websocket和Node.js内Socket.io的关系

 

Socket.IO封装了Websocket,同时包含了其它的连接方式,比如Ajax。

原因:在于不是所有的浏览器都支持websocket,通过socket.io的封装,你不用关心里面用了什么连接方式。你在任何浏览器里都可以使用socket.io来建立异步的连接。socket.io包含了服务端和客户端的库,如果在浏览器中使用了socket.io的js,服务端也必须同样适用。如果你很清楚你需要的就是websocket,那可以直接使用websocket。

2、目前支持WebSocket的浏览器

Hixie 75/76:
Chrome 4.0
Safari 5.0.2
iOS 4.2
Firefox 4.0
Opera 11
HyBi-07+:
Chrome 14.0
Firefox 6.0
IE9, IE10
Hybi-10:
Chrome 14
Firefox 7
IE 10

3、目前支持WebSocket的服务器开发语言

基本上都可以

 

参考链接:

https://www.zhihu.com/question/20215561/answer/40316953

http://www.cnblogs.com/caosiyang/archive/2012/08/14/2637721.html

赞 (0)
分享到:更多 ()

留言板 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址