id

Erfordert (workerman >= 3.2.1)

Beschreibung:

int Worker::$id

Die id-Nummer des aktuellen Worker-Prozesses, im Bereich von 0 bis $worker->count-1.

Dieses Attribut ist nützlich, um Worker-Prozesse zu unterscheiden. Wenn beispielsweise ein Worker-Instanz mehrere Prozesse hat und der Entwickler nur in einem dieser Prozesse einen Timer setzen möchte, kann er dies durch Erkennung der Prozess-ID erreichen, zum Beispiel durch das Setzen des Timers nur im Prozess mit der ID-Nummer 0 dieser Worker-Instanz (siehe Beispiel).

Hinweis:

Der Wert der id-Nummer bleibt nach einem Prozessneustart unverändert.

Die Zuweisung der Prozess-ID basiert auf jeder Worker-Instanz. Jede Worker-Instanz beginnt mit der Zuweisung der Prozess-IDs bei 0, sodass es zwischen verschiedenen Worker-Instanzen zu Überschneidungen der Prozess-IDs kommt, jedoch innerhalb einer Worker-Instanz keine doppelten Prozess-IDs existieren. Zum Beispiel das folgende Beispiel:

<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// Worker-Instanz 1 hat 4 Prozesse, die Prozess-IDs sind 0, 1, 2, 3
$worker1 = new Worker('tcp://0.0.0.0:8585');
// Setze 4 Prozesse in Betrieb
$worker1->count = 4;
// Drucke die aktuelle Prozess-ID, die $worker1->id nach dem Start jedes Prozesses
$worker1->onWorkerStart = function($worker1)
{
    echo "worker1->id={$worker1->id}\n";
};

// Worker-Instanz 2 hat zwei Prozesse, die Prozess-IDs sind 0, 1
$worker2 = new Worker('tcp://0.0.0.0:8686');
// Setze 2 Prozesse in Betrieb
$worker2->count = 2;
// Drucke die aktuelle Prozess-ID, die $worker2->id nach dem Start jedes Prozesses
$worker2->onWorkerStart = function($worker2)
{
    echo "worker2->id={$worker2->id}\n";
};

// Starte die Worker
Worker::runAll();

Die Ausgabe ähnelt

worker1->id=0
worker1->id=1
worker1->id=2
worker1->id=3
worker2->id=0
worker2->id=1

Hinweis: Unter Windows-Systemen wird die Einstellung der Anzahl der Prozesse nicht unterstützt, daher gibt es nur die ID 0. Unter Windows-Systemen wird nicht unterstützt, dass zwei Worker aus derselben Datei lauschen, daher kann dieses Beispiel unter Windows nicht ausgeführt werden.

Beispiel

Eine Worker-Instanz hat 4 Prozesse, der Timer wird nur im Prozess mit der ID-Nummer 0 gesetzt.

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)
{
    // Setze den Timer nur im Prozess mit der ID-Nummer 0, keine Timer in den Prozessen 1, 2, 3
    if($worker->id === 0)
    {
        Timer::add(1, function(){
            echo "4 Worker-Prozesse, Timer nur im Prozess 0 gesetzt\n";
        });
    }
};
// Starte den Worker
Worker::runAll();