id

Richiesto (workerman >= 3.2.1)

Descrizione:

int Worker::$id

L'identificativo del processo worker corrente, con un range da 0 a $worker->count-1.

Questa proprietà è molto utile per distinguere i processi worker. Ad esempio, se un'istanza di worker ha diversi processi e il programmatore vuole impostare un timer solo in uno di essi, può farlo identificando il numero del processo id, ad esempio impostando un timer solo per il processo con id uguale a 0 (vedi esempio).

Nota:

Dopo il riavvio del processo, il valore dell'identificativo id rimarrà invariato.

L'assegnazione dell'identificativo id è basata su ogni istanza di worker. Ogni istanza di worker inizierà a numerare i propri processi da 0, quindi ci potrebbero essere dei duplicati tra le istanze di worker, ma non all'interno della stessa istanza di worker. Ad esempio, nel seguente esempio:

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

// L'istanza di worker 1 ha 4 processi, quindi gli id dei processi saranno rispettivamente 0, 1, 2, 3
$worker1 = new Worker('tcp://0.0.0.0:8585');
// Imposta l'avvio di 4 processi
$worker1->count = 4;
// Stampa l'id del processo corrente dopo l'avvio di ogni processo
$worker1->onWorkerStart = function($worker1)
{
    echo "worker1->id={$worker1->id}\n";
};

// L'istanza di worker 2 ha 2 processi, quindi gli id dei processi saranno rispettivamente 0, 1
$worker2 = new Worker('tcp://0.0.0.0:8686');
// Imposta l'avvio di 2 processi
$worker2->count = 2;
// Stampa l'id del processo corrente dopo l'avvio di ogni processo
$worker2->onWorkerStart = function($worker2)
{
    echo "worker2->id={$worker2->id}\n";
};

// Avvia il worker
Worker::runAll();

L'output sarà simile a:

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

Nota: poiché il sistema Windows non supporta l'impostazione del numero di processi count, c'è solo un identificativo 0. Inoltre, in Windows non è possibile avviare due worker in ascolto sullo stesso file, quindi questo esempio non funzionerà su Windows.

Esempio

Un'istanza di worker ha 4 processi e imposta un timer solo nel processo con id uguale a 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)
{
    // Imposta un timer solo nel processo con id uguale a 0, gli altri processi con id 1, 2, 3 non avranno il timer settato
    if($worker->id === 0)
    {
        Timer::add(1, function(){
            echo "4 processi worker, il timer è impostato solo nel processo con id 0\n";
        });
    }
};
// Avvia il worker
Worker::runAll();