id
Requiere (workerman >= 3.2.1)
Descripción:
int Worker::$id
El número de id del proceso worker actual, que varía entre 0 y $worker->count-1.
Este atributo es muy útil para distinguir los procesos worker, por ejemplo, si una instancia de worker tiene múltiples procesos, el desarrollador solo quiere establecer un temporizador en uno de esos procesos, puede hacerlo identificando el número de id del proceso, por ejemplo, estableciendo un temporizador solo en el proceso de esa instancia de worker con el número de id igual a 0 (ver el ejemplo).
Nota:
El valor del número de id no cambia después de reiniciar el proceso.
La asignación del número de id del proceso se basa en cada instancia de worker. Cada instancia de worker comienza desde 0 para numerar sus propios procesos, por lo que los números de id de los procesos pueden repetirse entre las instancias de worker, pero no se repetirán dentro de una misma instancia de worker. Por ejemplo, en el siguiente ejemplo:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// La instancia de worker1 tiene 4 procesos, el número de id de los procesos será 0, 1, 2, 3 respectivamente
$worker1 = new Worker('tcp://0.0.0.0:8585');
// Establecer el inicio de 4 procesos
$worker1->count = 4;
// Al iniciar cada proceso, imprime el número de id del proceso actual es decir, $worker1->id
$worker1->onWorkerStart = function($worker1)
{
echo "worker1->id={$worker1->id}\n";
};
// La instancia de worker2 tiene dos procesos, el número de id de los procesos será 0, 1 respectivamente
$worker2 = new Worker('tcp://0.0.0.0:8686');
// Establecer el inicio de 2 procesos
$worker2->count = 2;
// Al iniciar cada proceso, imprime el número de id del proceso actual es decir, $worker2->id
$worker2->onWorkerStart = function($worker2)
{
echo "worker2->id={$worker2->id}\n";
};
// Ejecutar worker
Worker::runAll();
La salida será similar a:
worker1->id=0
worker1->id=1
worker1->id=2
worker1->id=3
worker2->id=0
worker2->id=1
Nota: En sistemas Windows, debido a que no se admite la configuración de la cantidad de procesos, el id solo será 0. En sistemas Windows, no se admite inicializar dos Worker en el mismo archivo, por lo que este ejemplo no se puede ejecutar en sistemas Windows.
Ejemplo
Una instancia de worker tiene 4 procesos y solo se establece un temporizador en el proceso con el id igual 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)
{
// Solo se establece un temporizador en el proceso con el id igual a 0, los otros procesos 1, 2, 3 no tienen temporizador
if($worker->id === 0)
{
Timer::add(1, function(){
echo "4 procesos worker, el temporizador solo está establecido en el proceso 0\n";
});
}
};
// Ejecutar worker
Worker::runAll();