七叶笔记 » 数据库 » websocket+redis动态订阅和动态取消订阅的实现示例

websocket+redis动态订阅和动态取消订阅的实现示例

原理

websocket的订阅就是在前后端建立ws连接之后,前端通过发送一定格式的消息,后端解析出来去订阅或者取消订阅redis频道。

订阅频道消息格式:

模糊订阅格式

取消订阅格式

两个核心类,一个是redis的订阅监听类,一个是websocket的发布订阅类。

redis订阅监听类

1.jedis监听redis频道的时候如果遇见异常会关闭连接导致后续没有监听该频道,所以这里在subscribe捕获到异常的时候会重新创建一个jedis连接订阅该redis频道。

webSocket订阅推送类

这个类会有两个ConcurrentHashMap<String, ConcurrentHashMap<String, WebSocketServer>>类型类变量,分别存储订阅和模糊订阅的信息。

外面一层的String对应的值是topic_name,里面一层的String对应的值是sessionId。前端发送过来的消息里面对应的这三类操作其实就是对这两个map里面的。

还有个ConcurrentHashMap<String, RedisPubSub>类型的变量,存储的是事件-RedisPubSub,便于取消订阅的时候找到监听该频道(事件)的RedisPubSub对象。

信息进行增加或者删除;后端往前端推送数据也会根据不同的topic_name推送到不同的订阅者这边。

项目地址

上面介绍了核心代码,下面是完整代码地址

https://github.com/Curtain-Wang/websocket-redis-subscribe.git

Update20220415

参考评论区老哥的建议,将redis订阅监听类里面的subscribe和psubscribe方法调整如下:

到此这篇关于websocket+redis动态订阅和动态取消订阅的实现示例的文章就介绍到这了,更多相关websocket redis动态订阅 内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章