开发设计

01.WebSocket介绍

2019-06-01  本文已影响49人  哈哈大圣

WebSocket基础

一、HTTP/1.1的升级的WebSocket协议

1). 升级特点

  1. http升级后的重要特性:请求头中包含信息 Connection: Upgrade 表示升级连接, 升级握手完成后,不再使用http连接,甚至可以使用持久的、全双工的TCP套接字连接。(浏览器不会让开发者随意使用TCP栈)
  2. 升级的WebSocket协议首先使用非正常的HTTP请求以特定的的模式访问一个URL,存在重要头信息Connection: UpgradeUpgrade: websocket表示高速服务器将连接升级为WebSocket协议(RFC6455)。握手完成后,全双工通道建立完成,文本消息和二进制消息可以在两个方向上使用。客户端和服务端有对等的通信能力,都是简单的节点。

http和https表示使用不加密(ws)和SSL/TLS加密(wss)的方式进行通信,同样适用于WebSocket连接,建议使用wss方式进行连接(后续会介绍)

2). WebSocket协议的优点

  1. 连接在80(ws)或者443(wss)上创建,与Http使用的端口相同,几乎所有防火墙不会阻塞WebSocket的连接。
  2. 使用Http进行握手,该协议很自然地集成到网络浏览器和http服务器中。
  3. 心跳消息(ping pong)反复地被发送,保持WebSocket连接几乎一致处于活跃状态(一个节点周期性的发送一个小数据包到另一个节点(ping),另一个节点使用相同的数据包作为相应(pang),将使者两个节点都处于连接状态。)
  4. 该协议构建消息不需要额外的代码,消息启动和内容到达时,服务器好客户端都会知晓。
  5. WebSocket连接关闭时发送一个特殊的关闭消息,其中包含原因代码和用于解释连接被关闭原因的文本。
  6. WebSocket协议可以安全地支持跨域连接。避免Ajax和XMLHttpRequest上的限制。
  7. Http规范要求浏览器将并发连接数限制为每个主机名两个连接,但是握手之后该限制就不存在了,因为此时的连接已经不再是HTTP连接了。

3). WebSocket连接握手请求头与请求体头信息

  1. 请求体头信息
GET /webSocketEndpoint HTTP/1.1   # prelude信息
Host: www.example.org             # Host头信息
Connection: Upgrade               # 连接升级请求
Upgrade: websocket                # 升级连接类型
Origin: http://example.org        # 安全机制,预防非预期的跨域请求【服务器检查是否在允许的列表中】
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== # 浏览器生成的规范一致性检查,随机,base64编码
Sec-WebSocket-Version: 13         # 当前版本 
Sec-WebSocket-Protocol: game      # 用户自定义协议
  1. 响应头信息
HTTP/1.1 101 Switching Protocols
Server: Apache 2.4
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= # 在请求头Sec-WebSocket-Key添加了一个258EAFA5-E914-47DA-95CA-C5AB0DC85B11 使用SHA-1计算哈希值然后使用base64编码
Sec-WebSocket-Protocol: game

推荐使用wss方式建立连接,当在http代理的情况下,代理通常不会干涉SSL/TLS连接,而是让其自己运行!

二、WebSocket用途举例

  1. JavaScript聊天
  2. 多人在线游戏
  3. 在线股票
  4. 在线及时新闻网站
  5. 高清视频流
  6. 应用程序集群节点之间的通信
  7. 应用程序之间跨网络传输大量事务数据
  8. 远程系统或者软件状态和性能的时时监控
  9. 等等...
上一篇下一篇

猜你喜欢

热点阅读