当前位置: 代码网 > it编程>编程语言>Java > WebSocket解决方案(springboot 基于Redis发布订阅)

WebSocket解决方案(springboot 基于Redis发布订阅)

2024年08月01日 Java 我要评论
因为一般的请求都是HTTP请求(单向通信),HTTP是一个短连接(非持久化),且通信只能由客户端发起,HTTP协议做不到服务器主动向客户端推送消息。WebSocket确能很好的解决这个问题,服务端可以主动向客户端推送消息,客户端也可以主动向服务端发送消息,实现了服务端和客户端真正的平等。3.WebSocket 服务器负责监听客户端的连接请求,一旦有客户端连接,服务器会创建一个 WebSocket 会话(Session)来管理这个连接。socket服务订阅redis的消息,订阅成功后进行推送。

websocket        

        因为一般的请求都是http请求(单向通信),http是一个短连接(非持久化),且通信只能由客户端发起,http协议做不到服务器主动向客户端推送消息。websocket确能很好的解决这个问题,服务端可以主动向客户端推送消息,客户端也可以主动向服务端发送消息,实现了服务端和客户端真正的平等

特点

1.全双工通信:允许服务器和客户端在同一连接上同时进行双向通信

2.持久连接:连接一旦建立,会一直保持打开状态,减少了每次连接建立和关闭的开销,使通信更加高效

3.低延迟:由于连接保持打开状态,websocket 通信具有较低的延迟,适用于实时性要求较高的应用

4.兼容性:代浏览器和大多数服务器支持 websocket

5.安全性:与其他网络通信协议一样,websocket 通信也需要一些安全性的考虑。可以使用加密协议(如 tls)来保护数据在网络传输中的安全性

实战

1.添加依赖
2.创建配置类

创建配置类,并将其注入到bean容器中

3.创建websocketserver类

创建websockethandler类,并将其注入到bean容器中

功能点:

1.处理异常: 与任何网络通信一样,websocket 连接可能会面临各种异常情况,如断开连接、网络问题等。websocket 服务器需要能够处理这些异常情况,进行适当的清理和处理。

2.消息处理: 一旦客户端连接成功,websocket 服务器需要处理客户端发送过来的消息。这可以在 websocket 端点中的方法上定义处理逻辑。服务器可以根据不同的业务需求处理不同类型的消息

3.websocket 服务器负责监听客户端的连接请求,一旦有客户端连接,服务器会创建一个 websocket 会话(session)来管理这个连接。服务器需要能够维护这些连接,包括打开、关闭、保持心跳等操作。

4.websocket 服务器需要注册一个或多个 websocket 端点。每个端点对应一种处理逻辑,可以处理客户端发送过来的消息,以及向客户端发送消息。这些端点通过注解或配置来定义

因业务需求,常需要对获取的消息进行处理,websocket 不能注入( @autowired ) service,解决办法:

4.测试

redis 发布/订阅

特点

        发布/订阅是一种消息通信模式,其中发送者(发布者)发布消息,多个接收者(订阅者)订阅并接收这些消息。发布者和订阅者之间没有直接联系,消息由消息中间件(如 redis)传递。

优点

        高性能:redis 作为内存存储,具备极高的读写性能,能够快速处理发布和订阅消息

        简单易用:redis 的发布/订阅接口简单,易于集成和使用

        实时性强:发布的消息会立即传递给所有订阅者,具备高实时性

缺点

        消息丢失:由于 redis 是内存存储,如果 redis 实例宕机,未处理的消息可能会丢失
        无法持久化:redis 的发布/订阅模式不支持消息持久化,无法存储和检索历史消息
        订阅者不可控:发布者无法控制订阅者的数量和状态,无法保证所有订阅者都能接收到消息
        无确认机制:发布者无法确认消息是否被订阅者接收和处理

        redis 的发布订阅功能并不可靠,如果我们需要保证消息的可靠性、包括确认、重试等要求,我们还是要选择mq实现发布订阅

运用场景

        对于消息处理可靠性要求不强

        消息无需持久化

        消费能力无需通过增加消费方进行增强

        架构简单 中小型系统不希望应用过多中间件

发布订阅命令

springboot整合

1.添加依赖
2.配置redis
3.创建redis配置类

注意:

4.创建消息监听器
5.配置消息监听容器
6.发布消息

websocket与发布/订阅结合

        并发过高时,websocket连接需单独部署,减缓压力;websocket将业务信息实时推送给前端,就用到了redis 发布订阅功能。

使用

socket消息推送时,把信息发布到redis中。socket服务订阅redis的消息,订阅成功后进行推送

1.在websocket服务中创建消息监听器(处理消息)

2.在websocket服务中创建消息监听容器

3.在业务服务中发布消息

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com