WebSocket介绍
所属分类 websocket
浏览量 50
WebSocket 全双工通信
允许服务端主动向客户端推送数据
浏览器和服务器只需要完成一次握手,两者之间创建持久连接, 并进行双向数据传输。
WebSocket协议 2008年诞生,2011年成为国际标准。
WebSocket协议可分为握手阶段和数据通信阶段
HTTP 协议缺陷:通信只能由客户端发起,不具备服务器推送能力。
聊天室 ,客户端轮询 效率低
HTTP/2 具备服务器推送功能,但只能推送静态资源,无法推送指定的信息
one-way request/response stateless half-duplex
WebSocket 特点:
1. 建立在 TCP 协议之上
2. 与 HTTP 协议兼容性好,默认端口也是80和443,握手阶段采用 HTTP 协议
3. 数据格式轻量,性能开销小,通信高效
4. 可以发送文本和二进制数据
5. 没有同源限制,客户端可以与任意服务器通信。
6. 协议标识符 ws( wss 加密) ws://example.com:80/some/path
WebSocket 与 HTTP
相同点: 都基于TCP,都是应用层协议。
联系: WebSocket建立握手时,数据通过HTTP传输。但是建立之后,传输时不需要HTTP协议
WebSocket 适用场景
实时聊天
在线协作和协同编辑
实时数据展示
在线游戏
推送服务
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Key 由客户端生成,用于在 WebSocket 握手过程中验证服务器是否支持 WebSocket 协议。
Sec-WebSocket-Key 生成过程如下:
客户端生成随机字符串:客户端首先生成一个随机的 16 字节值,这个值通常是通过随机数生成器生成的。
Base64 编码:生成的 16 字节随机值随后被 Base64 编码,形成 Sec-WebSocket-Key。
发送给服务器:客户端将这个 Sec-WebSocket-Key 包含在 WebSocket 握手请求的头部中发送给服务器。
服务器验证:
服务器接收到 Sec-WebSocket-Key 后,会将其与一个固定的 GUID 字符串(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)拼接,
然后进行 SHA-1 哈希运算,最后将结果进行 Base64 编码,生成 Sec-WebSocket-Accept 响应头,返回给客户端。
WebSocket 连接过程
1. 客户端发起http请求,经过3次握手后,建立起TCP连接;http 请求里存放 WebSocket 支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等
2. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据
3. 客户端收到连接成功的消息后,借助TCP传输信道进行全双工通信
WebSocket属于应用层协议,依赖传输层的 TCP 协议 ,通过 HTTP/1.1 协议的 101 状态码进行握手建立连接。
Websocket优缺点
优点:
WebSocket协议建立后,通信效率高
服务器可以向客户端推送消息
缺点:
少部分浏览器不支持,浏览器支持的程度与方式有区别
javascript
let ws= new WebSocket('ws://localhost:8888/ws/hello')
ws.onopen = function(){
console.log("connect")
ws.send("hello,websocket")
}
ws.onmessage = function(res){
console.log('res',res)
}
Java-WebSocket 是一个开源的、轻量级的WebSocket客户端和服务器库,它遵循Java API规范(JSR 356)来实现WebSocket协议。
上一篇
下一篇
CDC Change Data Capture
dolphinscheduler配置说明
Sec-WebSocket-Key 说明
netty内置编解码器
MQTT与WebSocket
WebSocket通信过程及原理