tourze / symfony-workerman-bundle
Workerman模块
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ^8.1
- fidry/cpu-core-counter: ^1.2.0
- phpinnacle/buffer: ^1.2.0
- symfony/framework-bundle: ^6.4
- workerman/crontab: ^1.0.7
- workerman/workerman: ^5.1
This package is auto-updated.
Last update: 2025-03-24 03:18:37 UTC
README
核心功能与技术原理
WorkermanBundle 是基于 Workerman 的 Symfony 集成模块,提供了在 Symfony 应用中使用 Workerman 高性能异步网络通信框架的能力。该模块通过抽象接口和服务标签系统,实现了 Workerman 与 Symfony 依赖注入容器的无缝集成。
核心功能包括:
- 提供基于命令行的 Workerman 服务启动机制
- 自动发现并注册实现了特定接口的 Worker 服务
- 支持 TCP/UDP 等多种网络协议的服务端实现
- 提供缓冲区管理机制
- 集成 Crontab 定时任务系统
- 自动根据 CPU 核心数优化 Worker 进程数量
架构设计与关键类
核心接口
Bundle 通过四个核心接口定义了 Workerman 服务的行为规范:
-
WorkerBuilderInterface:Worker 服务的基础接口,定义了 Worker 的生命周期事件处理方法
getName()
: 定义服务标识onWorkerStart()
: Worker 启动时的初始化逻辑onWorkerStop()
: Worker 停止时的清理逻辑onWorkerReload()
: Worker 重载时的处理逻辑
-
ConnectableInterface:可连接的 Worker 服务接口,定义了网络连接相关的事件处理方法
getTransport()
: 指定传输协议(tcp/udp)getProtocolClass()
: 自定义协议处理类getListenIp()/getListenPort()
: 监听配置- 连接生命周期事件:
onConnect/onClose/onMessage/onError
-
BufferAwareInterface:缓冲区感知接口,定义了缓冲区管理相关的事件处理方法
onBufferFull()
: 发送缓冲区满时的处理onBufferDrain()
: 发送缓冲区清空时的处理
-
TimerInterface:定时任务接口,基于 workerman/crontab 实现
getExpression()
: 定义 Cron 表达式execute()
: 定时执行的任务逻辑
命令行组件
RunCommand
类是模块的核心执行入口,负责:
- 收集所有标记为
workerman.worker
的服务 - 收集并注册所有
workerman.timer
定时任务 - 根据服务实现的接口类型配置 Worker 实例
- 设置 Worker 进程数量为 CPU 核心数
- 配置 PID 文件和日志文件路径
- 启动 Workerman 服务
组件交互关系
graph TD A[RunCommand] -->|收集| B[WorkerBuilderInterface 服务] A -->|收集| T[TimerInterface 服务] B -->|可选实现| C[ConnectableInterface] B -->|可选实现| D[BufferAwareInterface] A -->|创建| E[Worker 实例] E -->|绑定事件| B E -->|条件绑定事件| C E -->|条件绑定事件| D T -->|注册到| E F[CpuCoreCounter] -->|提供| ALoading
扩展机制
Bundle 采用标签自动配置机制实现扩展:
- 实现
WorkerBuilderInterface
的服务会自动被标记为workerman.worker
- 实现
ConnectableInterface
的服务会自动被标记为workerman.connectable
- 实现
BufferAwareInterface
的服务会自动被标记为workerman.buffer-aware
- 实现
TimerInterface
的服务会自动被标记为workerman.timer
开发者只需实现相应接口,服务会被自动发现并集成到 Workerman 运行时中。
依赖关系
- 核心依赖:
workerman/workerman
: 提供底层网络通信框架workerman/crontab
: 提供定时任务支持
- 辅助依赖:
fidry/cpu-core-counter
: 用于检测系统 CPU 核心数phpinnacle/buffer
: 提供高效的二进制数据缓冲区处理
技术限制与注意事项
- Workerman 要求 PHP 运行在 CLI 模式下
- 在生产环境中,应使用 daemon 模式运行服务
- 由于 Workerman 采用多进程模型,需注意:
- 共享资源的并发访问问题
- 定时任务在每个 Worker 进程中都会执行
- 服务实现类应避免保存状态,或确保状态在多进程环境下的一致性
- 在高并发场景下:
- 应关注缓冲区管理以避免内存溢出
- 合理设置 Worker 进程数,避免过多进程导致系统资源耗尽
- 对于 CPU 密集型任务,建议保持 Worker 数量等于 CPU 核心数
- 对于 IO 密集型任务,可适当增加 Worker 数量