swoole_server::$worker_id
得到当前Worker进程的编号,包括Task进程。
int $server->worker_id;
例子:(运用$worker_id,在$worker_id=0的时候添加一个定时器)
<?php $serv = new swoole_server("0.0.0.0", 9501); $serv->set(array( 'worker_num' => 2, 'dispatch_mode' => 3, 'daemonize' => false, 'log_file' => '/tmp/swoole.log' )); $serv->on('start', function($serv) { echo 'start',PHP_EOL; }); $serv->on('workerStart', function($serv, $worker_id) { if($worker_id == 0) { swoole_timer_tick(2000, function($id) { echo "tick-1 2000ms\n"; var_dump($id); }); } echo "server start\n"; }); $serv->on('connect', function ($serv, $fd, $from_id){ echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Connect.\n"; }); $serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) { echo "[#".$serv->worker_id."]\tClient[$fd]: $data\n"; $serv->send($fd, json_encode(array("hello" => '1213', "bat" => "ab")).PHP_EOL); $serv->close($fd); }); $serv->on('close', function ($serv, $fd, $from_id) { echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Close.\n"; }); $serv->start();
这个属性与onWorkerStart时的$worker_id是相同的。
- Worker进程ID范围是[0, $serv->setting['worker_num'])
- task进程ID范围是[$serv->setting['worker_num'], $serv->setting['worker_num'] + $serv->setting['task_worker_num'])
工作进程重启后worker_id的值是不变的