(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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

thefist11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值