kynx/swoole-processor
Composer 安装命令:
composer require kynx/swoole-processor
包简介
Execute tasks in multi-process environment
README 文档
README
Run CLI batch jobs in coroutines across multiple processes.
Based on Swoole, the processor is ideal for running a large number of IO-intensive operations.
Install
composer require kynx/swoole-processor
Use
Create a JobProvider class that returns Job objects containing the payload you want to process:
use Kynx\Swoole\Processor\Job\Job; use Kynx\Swoole\Processor\Job\JobProviderInterface; class JobProvider implements JobProviderInterface { public function getIterator(): Generator { foreach (range(0, 10) as $payload) { // NOTE: your payload must be serializable!! yield new Job($payload); } } }
Create a Worker class to handle the jobs:
use Kynx\Swoole\Processor\Job\WorkerInterface; class Worker implement WorkerInterface { public function init(int $workerId): void { // perform any initialisation needed } public function run(Job $job): Job { // do work on payload echo "Got payload: " . $job->getPayload() . "\n"; // return job with result of process return $job->withResult("Processed: " . $job->getPayload()); } }
If required, create a CompletionHandler to do any post-processing:
use Kynx\Swoole\Processor\Job\CompletionHandlerInterface; class CompletionHandler implements CompletionHandlerInterface { public function complete(Job $job): void { // mark job as complete echo "Completed: " . $job->getResult() . "\n"; } }
Create a script to run the jobs in parallel:
use Kynx\Swoole\Processor\Config; use Kynx\Swoole\Processor\Processor; use Throwable; $processor = new Processor( new Config(), new JobProvider(), new Worker(), new CompletionHandler() ); // this will block until all jobs are processed $result = $processor->run(); return $result === true ? 0 : 1;
If you don't need to handle completion, omit the fourth parameter.
How it works
The JobProvider runs in its own process, and the resulting jobs are fired at a Swoole server listening on a local
socket. Both it and the the CompletionHandler are blocking. If the JobProvider returns a large number of jobs or
performs time-consuming operations, return a Generator so jobs can be started as soon as possible. The
CompletionHandler should be fast.
The server spawns a number of processes to handle the jobs - by default one less than the number of CPU cores detected.
The process runs your Worker inside a coroutine, ensuring IO operations do not block. Because of this, ensure all IO
uses a Connection Pool, covered in more detail below.
You can control the number of simultaneous jobs the processor will spawn by setting the concurrency parameter on the
the Config you pass to the constructor. It defaults to 10, with a maximum of workers x maxCoroutines.
Caveats
Jobpayloads and results must be serializable and, but default, together should be less than 2M when serialized- A
Workershould be stateless. If you need share data between workers, use a Table. - Uncaught exceptions will crash the process, causing it it re-spawn. For this reason your
Worker::run()is called inside atry ... catchblock. However the exception is discarded: if you care about where your program is going wrong, catch all exceptions inside yourWorkerand handle them yourself.
kynx/swoole-processor 适用场景与选型建议
kynx/swoole-processor 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 37 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 01 月 20 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 kynx/swoole-processor 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 kynx/swoole-processor 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 37
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 10
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-01-20