Workerman4 多服务器节点 websocket 集群,消息同步 redis 实现方案

星枫小哥_4673

星枫小哥_4673

2026-10-09

682人浏览

原创

workerman4 websocket集群消息同步核心是redis协调而非session复制:用redis维护用户路由表(online:user:id)、pub/sub广播消息、stream存离线消息、hash存会话元数据,并通过节点心跳实现故障感知。

workerman4 多服务器节点 websocket 集群,消息同步 redis 实现方案

Workerman4 多服务器节点 WebSocket 集群中,消息同步不能靠“复制 Session”或“共享内存”,因为 WebSocket 连接是绑定在具体进程和 TCP socket 上的本地资源。Redis 不是用来存连接本身,而是作为全局状态协调中心——它解决的是“谁在哪、消息该发给谁、掉线了怎么补”这三个核心问题。

用 Redis 维护在线用户路由表

每个节点在用户成功建立 WebSocket 连接后,立刻往 Redis 写一条带过期时间的记录:

  • Key:`online:user:10086`
  • Value:`{"node":"node-a","sid":"abc123","ts":1727960520}`(含节点标识、会话唯一 ID、时间戳)
  • 使用 `SET online:user:10086 "..." EX 60`,确保连接断开后自动清理

这样,当业务系统(比如聊天服务)要给用户 10086 推送消息时,先查 Redis 知道他在 node-a 节点,再通过内部通信机制(如 Redis Pub/Sub 或 HTTP RPC)把消息定向投递给 node-a,由它完成本地 Session 推送。

用 Redis Pub/Sub 做跨节点消息广播通道

不依赖节点间直连,所有节点都订阅同一个频道(例如 `ws:msg:global`),业务方发消息时只往这个频道 publish 一次:

  • 消息体示例:{"to_user":10086,"content":"hello","from_user":10001}
  • 每个节点收到后,检查本地是否持有该用户的连接(查自己维护的 `userSidMap` 或直接查 Redis 的在线路由)
  • 若本地有连接,直接调用 $connection->send();否则忽略

这种方式天然支持横向扩容,新增节点只需启动时订阅频道即可接入整个消息分发网络。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载

用 Redis Stream 存离线消息与会话快照

用户掉线期间产生的消息不能丢,需暂存在 Redis Stream 中:

  • Stream key:`offline:msg:10086`
  • 每条消息包含完整上下文(发送方、内容、时间、消息 ID)
  • 用户重连后,节点从 Stream 拉取未读消息(用 XREAD COUNT 50 STREAMS offline:msg:10086 $ 或按 ID 回溯)
  • 配合 `XACK` 标记已消费,避免重复推送

同时可将关键会话元数据(如最后活跃时间、设备类型)用 Hash 存到 `session:meta:abc123`,供其他模块快速查询,无需反序列化整个连接对象。

节点注册与心跳保活必须统一管理

集群需要一个全局可见的节点视图,否则无法做路由决策:

  • 每个 Workerman4 节点启动时,向 Redis 写入临时节点信息:SET node:node-a '{"ip":"10.0.1.10","port":2346,"ts":1727960520}' EX 30
  • 定时任务每 15 秒刷新一次 TTL,超时未刷新则认为节点下线
  • 路由逻辑查 `online:user:10086` 得到 node-a 后,再查 `node:node-a` 确认其是否存活,避免向已宕机节点转发

这套机制让集群具备故障感知能力,不需要额外引入 ZooKeeper 或 etcd。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2752

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

916

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

829

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

414

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2496

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4632

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

747

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习