id
দরকার (workerman >= 3.2.1)
বিবরণ:
int Worker::$id
বর্তমান worker প্রক্রিয়ার id নম্বর, পরিসর হলো 0 থেকে $worker->count-1।
এই প্রোপার্টি worker প্রক্রিয়াগুলি আলাদা করতে খুব উপকারী, উদাহরণস্বরূপ, একটি worker ইনস্ট্যান্সে একাধিক প্রক্রিয়া থাকলে, ডেভেলপার যদি তাদের মধ্যে শুধু একটি প্রক্রিয়ায় টাইমার সেট করতে চান, তাহলে তারা প্রক্রিয়া নম্বর id চিহ্নিত করে এটি করতে পারেন, যেমন শুধুমাত্র 해당 worker ইনস্ট্যান্স id নম্বর 0 এর প্রক্রিয়ায় টাইমার সেট করা (দেখুন উদাহরণ)।
সতর্কতা:
প্রক্রিয়া পুনরায় চালু হলে id নম্বরের মান অপরিবর্তিত থাকে।
প্রক্রিয়া নম্বর id এর বরাদ্দ প্রতিটি worker ইনস্ট্যান্সের ভিত্তিতে। প্রতিটি worker ইনস্ট্যান্স 0 থেকে শুরু করে তার প্রক্রিয়াগুলির নম্বর নির্ধারণ করে, তাই worker ইনস্ট্যান্সের মধ্যে প্রক্রিয়ার নম্বরগুলির পুনরাবৃত্তি থাকতে পারে, কিন্তু একটি worker ইনস্ট্যান্সের মধ্যে প্রক্রিয়ার নম্বর পুনরাবৃত্তি হবে না। উদাহরণস্বরূপ নিচের উদাহরণ:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// worker ইনস্ট্যান্স 1 এ 4টি প্রক্রিয়া আছে, প্রক্রিয়া id নম্বর যথাক্রমে 0, 1, 2, 3 হবে
$worker1 = new Worker('tcp://0.0.0.0:8585');
// 4টি প্রক্রিয়া শুরু করতে সেট করুন
$worker1->count = 4;
// প্রতিটি প্রক্রিয়া শুরু হওয়ার পর বর্তমান প্রক্রিয়া id নম্বর অর্থাৎ $worker1->id প্রিন্ট করুন
$worker1->onWorkerStart = function($worker1)
{
echo "worker1->id={$worker1->id}\n";
};
// worker ইনস্ট্যান্স 2 এ দুইটি প্রক্রিয়া আছে, প্রক্রিয়া id নম্বর যথাক্রমে 0, 1 হবে
$worker2 = new Worker('tcp://0.0.0.0:8686');
// 2টি প্রক্রিয়া শুরু করতে সেট করুন
$worker2->count = 2;
// প্রতিটি প্রক্রিয়া শুরু হওয়ার পর বর্তমান প্রক্রিয়া id নম্বর অর্থাৎ $worker2->id প্রিন্ট করুন
$worker2->onWorkerStart = function($worker2)
{
echo "worker2->id={$worker2->id}\n";
};
// worker চালান
Worker::runAll();
আউটপুট হিসাবে দেখতে পারেন
worker1->id=0
worker1->id=1
worker1->id=2
worker1->id=3
worker2->id=0
worker2->id=1
সতর্কতা: উইন্ডোজ সিস্টেমে প্রক্রিয়া সংখ্যা count এর সেটিং সমর্থিত নয়, তাই সেখানে id শুধুমাত্র একটি 0 হবে। উইন্ডোজ সিস্টেমে একই ফাইলের মধ্যে দুটি Worker শুনতে সমর্থিত নয়, তাই উইন্ডোজ সিস্টেমে এই উদাহরণটি চালানো যাবে না।
উদাহরণ
একটি worker ইনস্ট্যান্সে 4টি প্রক্রিয়া রয়েছে, শুধুমাত্র id নম্বর 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)
{
// শুধুমাত্র id নম্বর 0 এর প্রক্রিয়ায় টাইমার সেট করুন, অন্যান্য 1, 2, 3 নম্বর প্রক্রিয়ায় টাইমার সেট করবেন না
if($worker->id === 0)
{
Timer::add(1, function(){
echo "4টি worker প্রক্রিয়া, শুধুমাত্র 0 নম্বর প্রক্রিয়ায় টাইমার সেট করুন\n";
});
}
};
// worker চালান
Worker::runAll();