在 基于 DWR + ActiveMQ 的 Web 端订阅消息推送 里我实现了 Web 端订阅消息推送,然而,实际测试的时候发现速度不够,而且还不稳定,于是决定抛弃 DWR 和 ActiveMQ,使用 Socket.IO(封装了 WebSocket)做前端推送,自己写逻辑实现订阅逻辑。在前端使用 Socket.IO 提供的 JavaScript 客户端,在后端把 netty-socketio 整合进基于 Spring + SpringMVC 的 Java Web 后台,作为 Socket.IO 服务端。
接下来记录我的实现,比 DWR 配起来简单多了,感人😆。
Java 实现订阅逻辑
SocketioService 负责把消息推送到相应的前端。topicSubscribers 存储每个主题连接了哪些客户端,topicContent 存储每个主题的最新消息,最新消息是解析好的 JSON 字符串,publish 事件表示有新消息推送到前端。
1 | package project.socket.service; |
前端整合
前端入口程序为:
1 | <script src="js/socket.io.js"></script> |