🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Process\\Pool::\_\_construct [TOC] 创建进程池。函数原型: ~~~ 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`向工作进程投递人任务。 ~~~ $q = msg_get_queue($key); foreach (range(1, 100) as $i) { $data = json_encode(['data' => base64_encode(random_bytes(1024)), 'id' => uniqid(), 'index' => $i,]); msg_send($q, $i, $data, false); } ~~~ * 必须传入`Pool`创建时使用的`key` * 底层不支持`msg_send`的第二个参数`mtype`,请传入任意非`0`值