• Process\Pool::__construct
    • 参数
    • 消息队列

    Process\Pool::__construct

    创建进程池。函数原型:

    1. function Process\Pool::__construct(int $worker_num, int $ipc_type = 0, int $msgqueue_key = 0);

    参数

    • $worker_num:指定工作进程的数量
    • $ipc_type 进程间通信的模式,默认为0表示不使用任何进程间通信特性
      • 设置为0时必须设置onWorkerStart回调,并且必须在onWorkerStart中实现循环逻辑,当onWorkerStart函数退出时工作进程会立即退出
      • 设置为SWOOLE_IPC_MSGQUEUE表示使用系统消息队列通信,可设置$msgqueue_key指定消息队列的KEY,未设置消息队列KEY,将申请私有队列
      • 设置为SWOOLE_IPC_SOCKET表示使用Socket进行通信,需要使用listen方法指定监听的地址和端口
      • 使用非0设置时,必须设置onMessage回调,onWorkerStart变更为可选

    消息队列

    在使用SWOOLE_IPC_MSGQUEUE时可使用sysvmsg扩展提供的消息队列API向工作进程投递人任务。

    1. $q = msg_get_queue($key);
    2. foreach (range(1, 100) as $i) {
    3. $data = json_encode(['data' => base64_encode(random_bytes(1024)), 'id' => uniqid(), 'index' => $i,]);
    4. msg_send($q, $i, $data, false);
    5. }
    • 必须传入Pool创建时使用的key
    • 底层不支持msg_send的第二个参数mtype,请传入任意非0