4、WebSocket协议开发

概述:

HTTP通信是客户端控制的一请求一应答模式。

不适用低延迟应用。

如果有新数据可用时,立即将数据发送到客户端。需要通过长轮询等方式实现。

 

而WebSocket将网络套接字引入客户端和服务端,浏览器和服务器可以通过套接字建立持久的连接,双方随时都可以互发数据给对方。

HTTP协议的弊端

(1)半双工协议。数据可以在客户端和服务端两个方向上传输,但是同一时刻,只有一个方向上的数据传送

(2)消息冗长繁琐,包含请求头、请求体、换行符等,可用数据比例低,可能只有请求体中的数据

(3)如果使用长轮询实现实时推送,可能会引来黑客针对长轮询的攻击

长轮询:客户端每隔1s向服务端发送请求,然后服务端响应,通常用于实时推送新数据而设计。

由于HTTP Request的header是冗长的,所以客户端频繁请求,会占用很多的带宽和服务器资源。

WebSocket协议

HTML5定义了WebSocket协议,提供一种基于TCP的,浏览器和服务器间的全双工网络通信技术,同一时刻,可以在不同方向上通信,即可以同时接收和发送消息

WebSocket协议的特点

  • 单一的TCP连接,采用全双工模式通信
  • 对代理、防火墙和路由器透明
  • 无头部信息、Cookie和身份认证
  • 无安全开销
  • 通过"Ping/Pong"帧保持链路激活
  • 服务器可以主动传递消息给客户端,不再需要客户端轮询

WebSocket建立连接

客户端向服务端发起一个HTTP请求,包含一个附加头信息,其中Upgrade:WebSocket表明这是一个申请协议升级的HTTP请求

服务端解析这些附加的头信息,然后生成应答信息返回给客户端,连接建立成功。

这个连接会一直存在,直到有一方主动关闭连接。

WebSocket生命周期

握手成功后,客户端服务端通过"message"的方式通信

一个消息由一个或多个区别于网络层的帧组成。

帧有自己对应的类型,属于同一个消息的多个帧具有类型相同的数据。数据类型可以是文本、二进制、控制帧(协议级信令,如信号)

WebSocket连接关闭

通常是由服务端关闭,当时如果在一个合理的时间周期后没有收到服务端的TCP Close,客户端可以发起TCP Close。

握手关闭消息带有一个状态码和一个可选的关闭原因,必须发送一个Close控制帧。

WebSocket服务端开发

源码参见

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章