抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

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() 关闭连接
1
2
3
4
5