01.WebSocket介绍
2019-06-01 本文已影响49人
哈哈大圣
WebSocket基础
一、HTTP/1.1的升级的WebSocket协议
1). 升级特点
- http升级后的重要特性:请求头中包含信息
Connection: Upgrade
表示升级连接, 升级握手完成后,不再使用http连接,甚至可以使用持久的、全双工的TCP套接字连接。(浏览器不会让开发者随意使用TCP栈) - 升级的WebSocket协议首先使用非正常的HTTP请求以特定的的模式访问一个URL,存在重要头信息
Connection: Upgrade
、Upgrade: websocket
表示高速服务器将连接升级为WebSocket协议(RFC6455)。握手完成后,全双工通道建立完成,文本消息和二进制消息可以在两个方向上使用。客户端和服务端有对等的通信能力,都是简单的节点。
http和https表示使用不加密(ws)和SSL/TLS加密(wss)的方式进行通信,同样适用于WebSocket连接,建议使用wss方式进行连接(后续会介绍)
2). WebSocket协议的优点
- 连接在80(ws)或者443(wss)上创建,与Http使用的端口相同,几乎所有防火墙不会阻塞WebSocket的连接。
- 使用Http进行握手,该协议很自然地集成到网络浏览器和http服务器中。
- 心跳消息(ping pong)反复地被发送,保持WebSocket连接几乎一致处于活跃状态(一个节点周期性的发送一个小数据包到另一个节点(ping),另一个节点使用相同的数据包作为相应(pang),将使者两个节点都处于连接状态。)
- 该协议构建消息不需要额外的代码,消息启动和内容到达时,服务器好客户端都会知晓。
- WebSocket连接关闭时发送一个特殊的关闭消息,其中包含原因代码和用于解释连接被关闭原因的文本。
- WebSocket协议可以安全地支持跨域连接。避免Ajax和XMLHttpRequest上的限制。
- Http规范要求浏览器将并发连接数限制为每个主机名两个连接,但是握手之后该限制就不存在了,因为此时的连接已经不再是HTTP连接了。
3). WebSocket连接握手请求头与请求体头信息
- 请求体头信息
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 # 用户自定义协议
- 响应头信息
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用途举例
- JavaScript聊天
- 多人在线游戏
- 在线股票
- 在线及时新闻网站
- 高清视频流
- 应用程序集群节点之间的通信
- 应用程序之间跨网络传输大量事务数据
- 远程系统或者软件状态和性能的时时监控
- 等等...