(chap9 基于HTTP的功能追加协议) WebSocket使用浏览器进行全双工通信
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(chap9 基于HTTP的功能追加协议) WebSocket使用浏览器进行全双工通信相关的知识,希望对你有一定的参考价值。
1. 概念
利用Ajax和 Comet技术进行通信可以提升Web 的浏览速度。但问题在于通信若使用HTTP协议,就无法彻底解决瓶颈问题。WebSocket网络技术正是为解决这些问题而实现的一套新协议及API。
- 建立在HTTP基础上的协议,即 Web 浏览器与 Web 服务器之间全双工通信标准。
- 连接的发起方仍是客户端, 一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文,包括JSON、XML、html或图片等任意格式的数据。
2. 主要特点
2.1 推送功能
服务器可直接向客户端推送数据,不必等等其请求。
2.2 减少通信量,首部信息很少
只要建立起WebSocket连接,就希望一直保持连接状态,和HTTP相比,不但每次连接时的总开销减少,而且由于WebSocket的首部信息很小,通信量也相应减少了。
2. 实现过程
为了实现WebSocket通信,在HTTP连接建立之后,需要完成一次“握手”(Handshaking)的步骤。
2.1 握手·请求
为了实现WebSocket通信,需要用到HTTP的 Upgrade首部字段,告知服务器通信协议发生改变,以达到握手的目的。
GET/chat HTTP/1.1
Host: server.example.comUpgrade: websocket
Connection: Upgrade
Sec-webSocket-Key : dGhlIHNhbXBsZSBub25jZQ==origin: http://example.com
Sec-webSocket-Protocol: chat, superchatsec-webSocket-version: 13
- Sec-WebSocket-Key
字段内记录着握手过程中必不可少的键值。 - Sec-WebSocket-Protocol
字段内记录使用的子协议,子协议按 WebSocket协议标准在连接分开使用时,定义那些连接的名称。
2.2 握手·响应
对于之前的请求,返回状态码101 Switching Protocols的响应。
HTTP/1.1 101 Switching ProtocolsUpgrade: websocket
Connection: Upgrade
Sec-webSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+x0o=Sec-webSocket-Protocol:chat
Sec-WebSocket-Accept的字段值是由握手请求中的Sec-WebSocket-Key的字段值生成的。
成功握手确立 webSocket连接之后,通信时不再使用HTTP的数据帧,而采用WebSocket独立的数据帧。
2. 3. WebSocket API
javascript可调用“The webSocket API”( http://www.w3.org/TR/websockets/,由 W3C标准制定)内提供的 WebSocket程序接口,以实现 WebSocket协议下全双工通信。
eg. 调用WebSocket API,每50ms发送一次数据的实例。
var socket = new webSocket ('ws://game.example.com:12010/updates');
socket.onopen = function ({
setInterval ( function(){
if (socket .bufferedAmount -= o)
socket.send (getupdateData());},50);
}
以上是关于(chap9 基于HTTP的功能追加协议) WebSocket使用浏览器进行全双工通信的主要内容,如果未能解决你的问题,请参考以下文章