Redis 发布/订阅
SocketIO4J 使用 Redisson 客户端连接到 Redis 服务器。也可能支持诸如 Valkey 和 DragonflyDB 等兼容 Redis 的替代后端。
该 RedissonPubSubEventStore 为 socketio4j 提供一个使用的事件存储 Redis Pub/Sub。 它通过在 Redis 通道上广播消息实现服务器实例之间的基本事件转发,允许分布式房间操作和内部同步 —— 但不保证持久化或重放。
主要特性
短暂的广播消息传递 — 事件仅传递给当前连接的订阅者
异步监听回调 — Redis Pub/Sub 分发在 Netty 事件循环之外运行
轻量级多节点同步 — 当已存在 Redis 时仅需最小配置
按事件主题路由 — 事件类型直接映射到 Pub/Sub 通道
重复过滤 — 过滤来自同一节点的事件(
nodeId)
工作原理
publish0将事件根据事件类型发送到 Redis Pub/Sub 通道subscribe0在对应通道上注册类型安全的监听器交付为 仅推送 — 订阅者必须在线才能接收消息
在取消订阅或关机时,主题监听器会被移除,但 Redis 客户端保持打开
模式
MULTI_CHANNEL
每个事件映射到其各自的 Pub/Sub 通道
默认;减少事件串扰
SINGLE_CHANNEL
所有事件路由到 ALL_SINGLE_CHANNEL
当需要对所有事件类型进行完全排序时
优点
👍 配置极为简单 👍 零持久化开销 —— 纯广播语义 👍 非常适合以 Redis 为中心的部署或原型 👍 对于基本的多节点通信开箱即用
限制
ℹ️ 事件为 不持久化 — 订阅者在断连期间会错过事件
ℹ️ 无重放机制 —— 重新连接的节点从“现在”开始
ℹ️ 重新连接期间可能出现重复消息
ℹ️ 排序仅适用于每个通道;全局排序需要 SINGLE_CHANNEL 模式
交付保证: 最多一次(At-most-once)语义。 尽力而为、短暂的传递 —— 监听器必须容忍消息丢失和乱序传递。
最后更新于
这有帮助吗?