swoole server 的 dispatch_mode 有7种分发模式,常用1–5:1轮询(无状态)、2 fd取模(默认,连接级状态)、3忙闲抢占(同步阻塞)、4 ip取模(ip级状态)、5 uid绑定(用户级状态),需按业务状态粒度选择。

dispatch_mode 是 Swoole Server 控制数据包如何从 Reactor 线程分发到 Worker 进程的核心配置,直接影响连接状态管理、负载均衡和业务逻辑设计。Swoole 5(及主流 4.x 版本)仍沿用这 7 种模式,但实际常用的是 1、2、3、4、5。选错模式可能导致连接事件丢失、状态不一致或性能瓶颈。
轮询模式(dispatch_mode = 1)
请求按顺序逐一分配给每个 Worker,类似 Nginx 的 round-robin。适合完全无状态的纯计算型服务,比如日志转发、简单协议解析、HTTP 网关转发等。
- 不保证同一连接的 onConnect/onReceive/onClose 在同一个 Worker 执行,底层会屏蔽 onConnect/onClose 回调
- Worker 负载最均衡,但无法在内存中维护连接上下文(如用户登录态、会话变量)
- 适用于短连接、高频请求、可水平扩展的无状态服务
FD 取模固定分配(dispatch_mode = 2)
根据客户端连接的文件描述符($fd)对 worker_num 取模,固定分配到某个 Worker。这是默认值,也是有状态 TCP 服务最稳妥的起点。
- 同一个 TCP 连接的所有事件(onConnect/onReceive/onClose)一定由同一个 Worker 处理,便于在进程内缓存连接状态
- 若客户端使用连接池(如 100 个进程复用 10 个长连接),可能造成 Worker 负载不均
- 断线重连后 $fd 改变,新连接可能被分到不同 Worker,状态无法延续
忙闲抢占模式(dispatch_mode = 3)
Reactor 只把新数据投递给当前空闲的 Worker,类似“谁有空谁处理”。适合同步阻塞型业务,比如调用 MySQL 或 Redis 的传统 PHP 代码。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 能动态缓解 Worker 压力,避免请求堆积在忙碌进程
- 连接事件随机落在任意空闲 Worker,无法依赖本地内存保存连接状态
- 必须配合外部存储(Redis/APCu)管理 session、连接映射或心跳状态
- 常见于需要同步 I/O 且对延迟敏感的场景,如实时消息广播的接收端
IP 取模分配(dispatch_mode = 4)
用客户端 IP 做 ip2long() 后对 worker_num 取模,确保同一 IP 的所有连接始终落到同一个 Worker。
- 解决 dispatch_mode=2 下断线重连导致 $fd 变化、状态丢失的问题
- 天然支持 NAT 环境(多个用户共用公网 IP),但也会放大单 IP 的负载倾斜风险
- 适合需要基于来源做本地限流、黑白名单、地域缓存的场景
- 注意:IPv6 地址需先转为整数或改用其他哈希方式,否则可能溢出
UID 绑定分配(dispatch_mode = 5)
应用层调用 $server->bind($fd, $uid) 显式绑定用户标识,后续该连接全部路由到 UID % worker_num 对应的 Worker。
- 最灵活的状态绑定方式,UID 可以是用户 ID、设备号、token 哈希等业务唯一标识
- 支持字符串 UID(用 crc32 或 xxHash 转整数),适合账号体系明确的服务
- 要求业务层主动管理绑定时机(通常在 onConnect 或首次 onReceive 中完成)
- 典型用于 IM、在线游戏、多房间协作等强用户归属感的长连接服务
UDP 和 Stream 模式补充说明
UDP 协议下,dispatch_mode=2/4/5 本质都是基于客户端地址(IP+Port)哈希,因为 UDP 无连接概念;而 dispatch_mode=7(stream 模式)仅适用于 SWOOLE_BASE 模式,由空闲 Worker 主动 accept,适合极简嵌入式场景,生产环境极少使用。
模式选择不是越复杂越好,关键是匹配你的状态粒度:无状态 → 1 或 3;单连接状态 → 2;单 IP 状态 → 4;单用户状态 → 5。搭配 max_request、task_worker_num 和连接池使用,才能发挥 Swoole 高并发优势。










