WebSocket协议RFC 6455提供了一种标准化方法,可通过单个TCP连接在客户端和服务器之间建立全双工双向通信通道。它来自HTTP的不同TCP协议,但设计为使用端口80和443通过HTTP工作,并允许重用现有的防火墙规则。运行在TLS之上时,默认使用443端口。
WebSocket使客户端和服务器之间的数据交换变得更加简单,允许服务器主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
介绍
WebSocket交互以HTTP请求开始,该HTTP请求使用HTTP "Upgrade"标头升级,或者在这种情况下切换到WebSocket协议:
1 2 3 4 5 6 7 8
| GET / spring-websocket-portfolio / portfolio HTTP / 1.1 Host:localhost:8080 Upgrade:websocket Connection:Upgrade Sec-WebSocket-Key:Uc9l9TMkWGbHFD2qnFHltg == Sec-WebSocket-Protocol:v10.stomp,v11.stomp Sec-WebSocket-Version:13 Origin:http:// localhost:8080
|
- Connection必须设置为Upgrade,表示客户端希望连接升级
- Upgrade字段必须设施webSocket,表示连接升级到WebSocket协议
- Sec-WebSocket-Key是随机字符串,服务器会用这些数据来构造出一个SHA-1的信息摘要。如此操作,避免普通HTTP请求被误以为WebScoket协议
- Sec-WebSocket-Version表示支持的版本。RFC6455要求使用的版本是13,之前的版本均应当弃用
- Origin字段可选,通常用来表示在浏览器中发起此WebSocket连接所在的页面,类似Referer。但是,与Referer不同的是,Origin只包含了协议和主机名称。
WebSocket和Socket的区别
Socket是传输控制层协议,WebScoket是应用层协议。
SpringBoot中的使用
客户端介绍
WebSocket 对象创建
1
| var socket = new WebSocket(url,[protocol]);
|
| 参数 |
描述 |
| url |
指定连接的URL |
| protocol |
参数可选,指定可接收的子协议 |
WebSocket 方法
| 方法 |
描述 |
| Socket.send() |
使用连接发送数据 |
| Socket.close() |
关闭连接 |