websocket
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它使得客户端和服务器之间可以进行实时的数据交互,与传统的 HTTP 请求 / 响应模式相比,具有更低的延迟和更高效的通信。
一、工作原理
-
建立连接
- 客户端向服务器发送一个 HTTP 请求,请求升级到 WebSocket 协议。这个请求包含一些特定的头部信息,表明客户端希望建立 WebSocket 连接。
- 服务器如果支持 WebSocket,会返回一个特殊的 HTTP 响应,同意将连接升级到 WebSocket。此时,TCP 连接就被转换为 WebSocket 连接。
-
数据传输
- 一旦连接建立,双方可以随时发送数据。数据可以是文本格式或二进制格式。
- WebSocket 连接是全双工的,意味着客户端和服务器可以同时发送和接收数据,而不需要等待对方完成一个请求 / 响应周期。
-
关闭连接
-
任何一方都可以通过发送一个关闭帧来关闭连接。关闭帧中可以包含一个状态码和一个原因说明,用于告知对方关闭连接的原因。
-
二、优点
-
实时性
- 能够实现实时的数据推送,适用于需要即时更新的应用场景,如在线聊天、实时游戏、股票行情等。
-
低延迟
- 与传统的 HTTP 轮询相比,WebSocket 减少了不必要的网络请求和响应时间,从而降低了延迟。
-
高效性
- 由于是全双工通信,数据传输更加高效。而且,WebSocket 协议的头部信息相对较小,减少了网络开销。
-
兼容性
-
大多数现代浏览器都支持 WebSocket,同时也有很多服务器端的实现可供选择,使得开发跨平台的实时应用变得更加容易。
-
三、应用场景
-
在线聊天应用
- 实现用户之间的实时聊天,消息可以即时发送和接收,无需不断刷新页面。
-
实时游戏
- 同步游戏状态,玩家的操作可以立即反映在其他玩家的屏幕上。
-
股票行情和金融交易
- 实时推送股票价格、交易数据等信息,让用户能够及时做出决策。
-
协作工具
- 如在线文档编辑、项目管理工具等,多人可以同时编辑和查看文档,实时同步修改内容。
总之,WebSocket 为实时应用提供了一种强大的通信机制,能够满足现代互联网应用对实时性和高效性的需求。
为什么会出现集群问题
- 随着我们业务系统数据量的增长,单台机器无法支撑我们业务。我们就需要加多台机器进行分流处理。
- websocket是长连接的形式。比如:我们客户端A连接了服务端A就会持续与服务器A进行长连接。那我们在服务器B发送的消息在客户端A无法接收到
解决websocket集群问题
- 使用redis发布订阅解决集群问题
- 使用rocketmq发布订阅模式
- 使用rabbitmq订阅模式并且使用匿名队列
- 使用rabbitmq插件stomp
大家有什么好的方案可以评论区讨论。
后面出一篇文章讲解一下具体的用法。其实我们知道有哪些方案后实现起来就简单多了。大家也可以自己实现一下