• Process\Pool
    • 常量定义
    • 异步支持
    • 使用实例

    Process\Pool

    进程池,基于ServerManager模块实现。可管理多个工作进程。该模块的核心功能为进程管理,相比Process实现多进程,Process\Pool更加简单,封装层次更高,开发者无需编写过多代码即可实现进程管理功能。

    此特性需要2.1.2或更高版本

    常量定义

    • SWOOLE_IPC_MSGQUEUE :系统消息队列通信
    • SWOOLE_IPC_SOCKETSOCKET通信

    异步支持

    • 可在onWorkerStart中使用Swoole提供的异步或协程API,工作进程即可实现异步
    • 底层自带的消息队列和SOCKET通信均为同步阻塞IO
    • 如果进程为异步模式,请勿使用任何自带的同步IPC进程通信功能 (无法使用message回调)
    低于4.0版本需要在onWorkerStart末尾添加swoole_event_wait进入事件循环

    使用实例

    1. $workerNum = 10;
    2. $pool = new Swoole\Process\Pool($workerNum);
    3. $pool->on("WorkerStart", function ($pool, $workerId) {
    4. echo "Worker#{$workerId} is started\n";
    5. $redis = new Redis();
    6. $redis->pconnect('127.0.0.1', 6379);
    7. $key = "key1";
    8. while (true) {
    9. $msgs = $redis->brpop($key, 2);
    10. if ( $msgs == null) continue;
    11. var_dump($msgs);
    12. }
    13. });
    14. $pool->on("WorkerStop", function ($pool, $workerId) {
    15. echo "Worker#{$workerId} is stopped\n";
    16. });
    17. $pool->start();