(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使用浏览器进行全双工通信的主要内容,如果未能解决你的问题,请参考以下文章

(chap9 基于HTTP的功能追加协议) 期盼已久的http 2.0

(chap9 基于HTTP的功能追加协议) HTTP瓶颈

读《图解HTTP》总结--第九章

HTTP用户认证追加协议以及相关技术简单学习

HTTP协议与攻击

基于HTTP 协议认证介绍与实现