id
要求(workerman >= 3.2.1)
説明:
int Worker::$id
現在のworkerプロセスのid番号で、範囲は0から$worker->count-1です。
この属性はworkerプロセスを区別するのに非常に便利です。例えば、1つのworkerインスタンスに複数のプロセスがある場合、開発者はその中の1つのプロセスでのみタイマーを設定したいとき、プロセス番号idを識別することでそれを実現できます。例えば、そのworkerインスタンスのid番号が0のプロセスでのみタイマーを設定することができます(サンプル参照)。
注意:
プロセスが再起動されるとid番号の値は変わりません。
プロセス番号idの割り当ては各workerインスタンスに基づいています。各workerインスタンスは0から自分のプロセス番号を付け始めるため、workerインスタンス間ではプロセス番号が重複することがありますが、1つのworkerインスタンス内のプロセス番号は重複しません。以下の例を参照してください:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// workerインスタンス1は4つのプロセスを持ち、プロセスid番号はそれぞれ0、1、2、3になります
$worker1 = new Worker('tcp://0.0.0.0:8585');
// 4つのプロセスを起動するように設定
$worker1->count = 4;
// 各プロセス起動後に現在のプロセスid番号つまり $worker1->id を印刷します
$worker1->onWorkerStart = function($worker1)
{
echo "worker1->id={$worker1->id}\n";
};
// workerインスタンス2は2つのプロセスを持ち、プロセスid番号はそれぞれ0、1になります
$worker2 = new Worker('tcp://0.0.0.0:8686');
// 2つのプロセスを起動するように設定
$worker2->count = 2;
// 各プロセス起動後に現在のプロセスid番号つまり $worker2->id を印刷します
$worker2->onWorkerStart = function($worker2)
{
echo "worker2->id={$worker2->id}\n";
};
// workerを実行
Worker::runAll();
出力は次のようになります
worker1->id=0
worker1->id=1
worker1->id=2
worker1->id=3
worker2->id=0
worker2->id=1
注意:Windowsシステムはプロセス数countの設定をサポートしていないため、idは常に0だけです。また、Windowsシステムでは同じファイルで2つのWorkerを初期化してリスニングすることをサポートしていないため、Windowsシステムではこの例を実行できません。
サンプル
1つのworkerインスタンスに4つのプロセスがあり、id番号が0のプロセスでのみタイマーを設定します。
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('tcp://0.0.0.0:8585');
$worker->count = 4;
$worker->onWorkerStart = function($worker)
{
// id番号が0のプロセスでのみタイマーを設定し、他の1、2、3号プロセスではタイマーを設定しません
if($worker->id === 0)
{
Timer::add(1, function(){
echo "4つのworkerプロセスのうち、0号プロセスだけにタイマーを設定しました\n";
});
}
};
// workerを実行
Worker::runAll();