id
Gereksinim (workerman >= 3.2.1)
Açıklama:
int Worker::$id
Mevcut worker sürecinin id numarası, aralık 0 ile $worker->count-1 arasındadır.
Bu özellik, worker süreçlerini ayırt etmek için çok yararlıdır. Örneğin, 1 worker örneği birden fazla sürece sahip olduğunda, geliştirici yalnızca bir süreçte zamanlayıcı ayarlamak isterse, süreç numarası id'sini tanıyarak bunu yapabilir, örneğin yalnızca bu worker örneği id numarası 0 olan süreçte zamanlayıcı ayarlamak (bkz. örnek).
Dikkat:
Süreç yeniden başlatıldığında id numarası değişmez.
Süreç numarası id'sinin dağıtımı, her worker örneğine bağlıdır. Her worker örneği, kendi süreçlerine 0'dan başlayarak numara verir, bu nedenle worker örnekleri arasında süreç numaraları tekrarlanabilir, ancak bir worker örneği içindeki süreç numaraları tekrarlanamaz. Aşağıdaki örnekte olduğu gibi:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// worker örneği 1, 4 sürece sahiptir, süreç id numaraları sırasıyla 0, 1, 2, 3 olacaktır
$worker1 = new Worker('tcp://0.0.0.0:8585');
// 4 sürecin başlatılmasını ayarla
$worker1->count = 4;
// Her süreç başlatıldığında mevcut süreç id numarasını yani $worker1->id'yi yazdır
$worker1->onWorkerStart = function($worker1)
{
echo "worker1->id={$worker1->id}\n";
};
// worker örneği 2, iki sürece sahiptir, süreç id numaraları sırasıyla 0, 1 olacaktır
$worker2 = new Worker('tcp://0.0.0.0:8686');
// 2 sürecin başlatılmasını ayarla
$worker2->count = 2;
// Her süreç başlatıldığında mevcut süreç id numarasını yani $worker2->id'yi yazdır
$worker2->onWorkerStart = function($worker2)
{
echo "worker2->id={$worker2->id}\n";
};
// worker'ı çalıştır
Worker::runAll();
Çıktı benzer şekilde olacaktır:
worker1->id=0
worker1->id=1
worker1->id=2
worker1->id=3
worker2->id=0
worker2->id=1
Dikkat: Windows sistemi, süreç sayısı count'un ayarlanmasını desteklemediğinden, id'nin sadece 0 numarası vardır. Windows sisteminde aynı dosya altında iki Worker dinletimi başlatmak desteklenmediğinden, bu örnek Windows sisteminde çalıştırılamaz.
Örnek
Bir worker örneği 4 sürece sahiptir, yalnızca id numarası 0 olan süreçte zamanlayıcı ayarlanmıştır.
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)
{
// Sadece id numarası 0 olan süreçte zamanlayıcı ayarla, diğer 1, 2, 3 numaralı süreçlerde zamanlayıcı ayarlama
if($worker->id === 0)
{
Timer::add(1, function(){
echo "4 worker süreci, yalnızca 0 numaralı süreçte zamanlayıcı ayarlandı\n";
});
}
};
// worker'ı çalıştır
Worker::runAll();