ที่ on

(ต้องการ Workerman เวอร์ชัน >= 3.3.0)

void \Channel\Client::on(string $event_name, callback $callback_function)

สมัครสมาชิกในเหตุการณ์ $event_name และลงทะเบียนฟังก์ชัน callback ที่เกิดขึ้นในช่วงเวลา $callback_function

พารามิเตอร์ของฟังก์ชัน callback

$event_name

ชื่อเหตุการณ์ที่สมัครสมาชิกไว้, มีค่าอะไรก็ได้

$callback_function

ฟังก์ชัน callback ที่เกิดขึ้นเมื่อเหตุการณ์เกิดขึ้น ลักษณะของฟังก์ชันคือ callback_function(mixed $event_data) ในนั้นมี $event_data ที่เป็นข้อมูลเหตุการณ์ที่ถูกตีพิมพ์ (publish) ขึ้นมา

โปรดทราบ:

หากลงทะเบียนฟังก์ชัน callback สองฟังก์ชัน หรือมากกว่านั้น ฟังก์ชัน callback ที่หลังจะแทนที่ฟังก์ชัน callback ก่อนหน้านั้น

ตัวอย่าง

Worker แบบ multi-process (หลายเซิร์ฟเวอร์) โฮสต์หนึ่งคนส่งข้อความไปยังทุกคน

start.php

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

// กำหนดเซิร์ฟเวอร์ Channel
$channel_server = new Channel\Server('0.0.0.0', 2206);

// WebSocket เซิร์ฟเวอร์
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// เมื่อโปรเซสของ worker เริ่ม
$worker->onWorkerStart = function($worker)
{
    // ลูกค้าช่องเชื่อมต่อไปยังเซิร์ฟเวอร์ Channel
    Channel\Client::connect('127.0.0.1', 2206);
    // สมัครสมาชิกเหตุการณ์ broadcast และลงทะเบียนฟังก์ชัน callback ของเหตุการณ์
    Channel\Client::on('broadcast', function($event_data)use($worker){
        // ส่งข้อความไปยังทุกโครงการของ worker ปัจจุบัน
        foreach($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // ให้ข้อมูลที่มาจากลูกค้าเป็นข้อมูลเหตุการณ์
   $event_data = $data;
   // ตีพิมพ์เหตุการณ์ broadcast ไปยังโปรเซสทุกๆ worker
   \Channel\Client::publish('broadcast', $event_data);
};

Worker::runAll();

การทดสอบ

เปิดเบราว์เซอร์ Chrome และกด F12 เพื่อเปิดคอนโซล debugger ในส่วนของ Console พิมพ์เข้าไป (หรือวางโค้ดต่อไปนี้ลงใน html แล้วรันด้วย JS)

การเชื่อมต่อที่รับข้อมูล

// 127.0.0.1 ให้เปลี่ยนเป็น IP ที่ Workerman อยู่จริง
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
    alert("ได้รับข้อความจากเซิร์ฟเวอร์:" + e.data);
};

การประกาศข้อความ

ws.send('สวัสดีชาวโลก');