id

Yêu cầu (workerman >= 3.2.1)

Giải thích:

int Worker::$id

Số id của tiến trình worker hiện tại, trong khoảng 0 đến $worker->count-1.

Thuộc tính này rất hữu ích để phân biệt các tiến trình worker, ví dụ như một instance worker có nhiều tiến trình, nhà phát triển chỉ muốn thiết lập bộ hẹn giờ trong một tiến trình, điều này có thể được thực hiện bằng cách xác định số id của tiến trình, chẳng hạn như chỉ thiết lập bộ hẹn giờ trong tiến trình có id là 0 (xem ví dụ).

Lưu ý:

Giá trị số id không thay đổi sau khi tiến trình khởi động lại.

Phân phối số id của tiến trình là dựa trên từng instance worker. Mỗi instance worker sẽ bắt đầu từ số 0 để đánh số cho các tiến trình của nó, vì vậy số id tiến trình giữa các instance worker có thể trùng nhau, nhưng số id trong một instance worker sẽ không trùng nhau. Ví dụ dưới đây:

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

// instance worker 1 có 4 tiến trình, số id các tiến trình sẽ lần lượt là 0, 1, 2, 3
$worker1 = new Worker('tcp://0.0.0.0:8585');
// Thiết lập khởi động 4 tiến trình
$worker1->count = 4;
// Mỗi tiến trình khởi động sẽ in số id tiến trình hiện tại tức là $worker1->id
$worker1->onWorkerStart = function($worker1)
{
    echo "worker1->id={$worker1->id}\n";
};

// instance worker 2 có 2 tiến trình, số id các tiến trình sẽ lần lượt là 0, 1
$worker2 = new Worker('tcp://0.0.0.0:8686');
// Thiết lập khởi động 2 tiến trình
$worker2->count = 2;
// Mỗi tiến trình khởi động sẽ in số id tiến trình hiện tại tức là $worker2->id
$worker2->onWorkerStart = function($worker2)
{
    echo "worker2->id={$worker2->id}\n";
};

// Chạy worker
Worker::runAll();

Đầu ra tương tự như

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

Lưu ý: Hệ thống Windows do không hỗ trợ thiết lập số tiến trình count, chỉ có id với một số 0. Hệ thống Windows không hỗ trợ khởi tạo hai Worker lắng nghe từ cùng một tệp, vì vậy ví dụ này không thể chạy trên hệ thống Windows.

Ví dụ

Một instance worker có 4 tiến trình, chỉ thiết lập bộ hẹn giờ trên tiến trình có id là 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)
{
    // Chỉ thiết lập bộ hẹn giờ trên tiến trình có id là 0, các tiến trình 1, 2, 3 không thiết lập bộ hẹn giờ
    if($worker->id === 0)
    {
        Timer::add(1, function(){
            echo "4 tiến trình worker, chỉ thiết lập bộ hẹn giờ trên tiến trình 0\n";
        });
    }
};
// Chạy worker
Worker::runAll();