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();