当前位置 : 首页 » 文章分类 :  开发  »  WebSocket

WebSocket

WebSocket 笔记

WebSocket简介

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,已被 W3C 定为标准。使用 WebSocket 可以使得客户端和服务器之间的数据交换变得更加简单。
在 WebSocket 协议中,浏览器和服务器只需要完成一次握手,两者之间就可以直接创建持久性的连接,并进行双向数据传输。

WebSocket 特点:
WebSocket 使用时需要先创建连接,这使得 Websocket 成为一种有状态的协议,在之后的通信过程中可以省略部分状态信息(例如身份认证等)。
WebSocket 连接在端口 80(ws)或者 443(wss)上创建,与 HTTP 使用的端口相同,这样,基本上所有的防火墙都不会阻止 WebSocket 连接。
WebSocket 使用 HTTP 协议进行握手,因此它可以自然而然地集成到网络浏览器和 HTTP 服务器中,而不需要额外的成本。
心跳消息(ping 和 pong)将被反复的发送,进而保持 WebSocket 连接一直处于活跃状态。
使用该协议,当消息启动或者到达的时候,服务端和客户端都可以知道。
WebSocket 连接关闭时将发送一个特殊的关闭消息。
WebSocket 支持跨域,可以避免 Ajax 的限制。
HTTP 规范要求浏览器将并发连接数限制为每个主机名两个连接,但是当我们使用 Websocket 的时候,当握手完成之后,该限制就不存在了,因为此时的连接已经不再是 HTTP 连接了。
WebSocket 协议支持扩展,用户可以扩展协议,实现部分自定义的子协议。
WebSocket 拥有更好的二进制支持以及更好的压缩效果。

STOMP

SpringBoot中使用WebSocket

1、利用 ServerEndpointExporter@ServerEndpoint 实现,是最简单快捷的方式。
ServerEndpointExporter 会扫描所有注解了 @ServerEndpoint 的类,将其注册为 Websocket Endpoint

SpringBoot2.0整合WebSocket,实现后端数据实时推送!
https://juejin.cn/post/6844904004762222606

2、

WebSocket和HTTP的关系

1、 WebSocket 和 HTTP 都是基于 TCP 协议的两个不同的协议
2、 WebSocket 依赖于 HTTP 连接

从HTTP升级到WebSocket

WebSocket 依赖于 HTTP 连接,那么它如何从连接的 HTTP 协议转化为 WebSocket 协议?
每个 WebSocket 连接都始于一个 HTTP 请求。
具体来说,WebSocket 协议在第一次握手连接时,通过 HTTP 协议在传送 WebSocket 支持的版本号,协议的字版本号,原始地址,主机地址等等一些列字段给服务器端:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Version: 13

注意,关键的地方是,这里面有个 Upgrade 首部,用来把当前的 HTTP 请求升级到 WebSocket 协议,这是 HTTP 协议本身的内容,是为了扩展支持其他的通讯协议。
如果服务器支持新的协议,则必须返回101:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

至此,HTTP 请求物尽其用,如果成功触发 onopen 事件,否则触发 onerror 事件,后面的传输则不再依赖 HTTP 协议。

WebSocket 为什么要依赖于 HTTP 协议的连接?
第一,WebSocket 设计上就是天生为 HTTP 增强通信(全双工通信等),所以在 HTTP 协议连接的基础上是很自然的一件事,并因此而能获得 HTTP 的诸多便利。
第二,这诸多便利中有一条很重要,基于 HTTP 连接将获得最大的一个兼容支持,比如即使服务器不支持 WebSocket 也能建立 HTTP 通信,只不过返回的是 onerror 而已,这显然比服务器无响应要好的多。

理清WebSocket和HTTP的关系
https://jayfeng.com/2016/07/25/%E7%90%86%E6%B8%85WebSocket%E5%92%8CHTTP%E7%9A%84%E5%85%B3%E7%B3%BB/

上一篇 Spring-Cloud-Netflix-Eureka

下一篇 北京中医药大学第三医院看颈椎记录

阅读
评论
968
阅读预计4分钟
创建日期 2019-12-05
修改日期 2021-04-06
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论