উদাহরণ 1

(Workerman সংস্করণ>=3.3.0 এর প্রয়োজন)

Worker এর উপর ভিত্তি করে মাল্টি-প্রসেস গ্রুপ পুশ সিস্টেম

    use Workerman\Worker;
    use Workerman\Connection\TcpConnection;
    require_once __DIR__ . '/vendor/autoload.php';

    $channel_server = new Channel\Server('0.0.0.0', 2206);

    $worker = new Worker('websocket://0.0.0.0:1234');
    $worker->count = 8;
    // সংযুক্তির জন্য বৈশ্বিক গ্রুপের ম্যাপের অ্যারের
    $group_con_map = array();
    $worker->onWorkerStart = function(){
        // Channel ক্লায়েন্ট Channel সার্ভারে সংযুক্ত হয়
        Channel\Client::connect('127.0.0.1', 2206);

        // বৈশ্বিক গ্রুপে বার্তা পাঠানোর ইভেন্টের জন্য শোনা
        Channel\Client::on('send_to_group', function($event_data){
            $group_id = $event_data['group_id'];
            $message = $event_data['message'];
            global $group_con_map;
            var_dump(array_keys($group_con_map));
            if (isset($group_con_map[$group_id])) {
                foreach ($group_con_map[$group_id] as $con) {
                    $con->send($message);
                }
            }
        });
    };
    $worker->onMessage = function(TcpConnection $con, $data){
        // গ্রুপে যোগদানের বার্তা {"cmd":"add_group", "group_id":"123"}
        // অথবা গ্রুপ বার্তা {"cmd":"send_to_group", "group_id":"123", "message":"এটি একটি বার্তা"}
        $data = json_decode($data, true);
        var_dump($data);
        $cmd = $data['cmd'];
        $group_id = $data['group_id'];
        switch($cmd) {
            // সংযোগ গ্রুপে যোগদান
            case "add_group":
                global $group_con_map;
                // সংযোগকে সংশ্লিষ্ট গ্রুপের অ্যারের মধ্যে যোগ করা
                $group_con_map[$group_id][$con->id] = $con;
                // এই সংযোগ কোন কোন গ্রুপে যোগ দিয়েছে তা রেকর্ড করতে, onclose সময় group_con_map এর সংশ্লিষ্ট গ্রুপের তথ্য পরিষ্কার করতে সহায়তা
                $con->group_id = isset($con->group_id) ? $con->group_id : array();
                $con->group_id[$group_id] = $group_id;
                break;
            // গ্রুপে বার্তা পাঠানো
            case "send_to_group":
                // Channel\Client সব সার্ভারে সব প্রসেসে গ্রুপ বার্তা পাঠানোর ইভেন্ট সম্প্রচারের জন্য
                Channel\Client::publish('send_to_group', array(
                    'group_id'=>$group_id,
                    'message'=>$data['message']
                ));
                break;
        }
    };
    // এখানে গুরুত্বপূর্ণ, সংযোগ বন্ধ হলে প্রায়োগিক গ্রুপের ডেটা থেকে সংযোগটি মুছে ফেলা, মেমরি লিক এড়ানোর জন্য
    $worker->onClose = function(TcpConnection $con){
        global $group_con_map;
        // সংযোগ করা সমস্ত গ্রুপ পরীক্ষা করে এবং group_con_map থেকে সংশ্লিষ্ট তথ্য মুছে ফেলুন
        if (isset($con->group_id)) {
            foreach ($con->group_id as $group_id) {
                unset($group_con_map[$group_id][$con->id]);
                if (empty($group_con_map[$group_id])) {
                    unset($group_con_map[$group_id]);
                }
            }
        }
    };

    Worker::runAll();

পরীক্ষা (ধরা যাক সবকিছু লোকালহোস্ট 127.0.0.1 এ চলছে)

  1. সার্ভার চালান
    
    php start.php start
    Workerman[del.php] DEBUG মোডে শুরু হচ্ছে
    ----------------------- WORKERMAN -----------------------------
    Workerman সংস্করণ:3.4.2          PHP সংস্করণ:7.1.3
    ------------------------ WORKERS -------------------------------
    ব্যবহারকারী          কর্মী         শোনা                    প্রসেসের স্থিতি
    liliang       ChannelServer  frame://0.0.0.0:2206       1         [OK] 
    liliang       none           websocket://0.0.0.0:1234   12        [OK] 
    ----------------------------------------------------------------
    প্রস্থান করতে Ctrl-C চাপুন। সফলভাবে শুরু হয়েছে।

2. ক্লায়েন্ট সার্ভারে সংযুক্ত হন

Chrome ব্রাউজার খুলুন, F12 চাপুন এবং ডিবাগ কনসোলটি খুলুন, Console ট্যাবে লিখুন (অথবা নিচের কোডটি html পেজে js চালানোর জন্য রাখুন)

```javascript
// ধরা যাক সার্ভারের আইপি ঠিকানা 127.0.0.1, পরীক্ষার সময় সঠিক সার্ভার আইপি তে পরিবর্তন করুন
ws = new WebSocket('ws://127.0.0.1:1234');
ws.onmessage = function(data){console.log(data.data)};
ws.onopen = function() {
    ws.send('{"cmd":"add_group", "group_id":"123"}');
    ws.send('{"cmd":"send_to_group", "group_id":"123", "message":"এটি একটি বার্তা"}');
};