on

(Yêu cầu phiên bản Workerman >= 3.3.0)

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

Đăng ký sự kiện $event_name và đăng ký hàm gọi lại $callback_function khi sự kiện xảy ra.

Tham số của hàm gọi lại

$event_name

Tên của sự kiện đã đăng ký, có thể là chuỗi bất kỳ.

$callback_function

Hàm gọi lại khi sự kiện xảy ra. Nguyên mẫu của hàm là callback_function(mixed $event_data). $event_data là dữ liệu sự kiện được truyền khi phát sự kiện.

Chú ý:

Nếu cùng một sự kiện được đăng ký với hai hàm gọi lại, hàm gọi lại sau sẽ ghi đè lên hàm gọi lại trước đó.

Ví dụ

Worker đa tiến trình (nhiều máy chủ), một khách hàng gửi tin nhắn và phát sóng đến tất cả các khách hàng

start.php

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

// Khởi tạo một máy chủ Channel
$channel_server = new Channel\Server('0.0.0.0', 2206);

// Máy chủ websocket
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// Mỗi khi một quá trình worker khởi động
$worker->onWorkerStart = function($worker)
{
    // Kết nối từ Client của Channel đến máy chủ Channel
    Channel\Client::connect('127.0.0.1', 2206);
    // Đăng ký sự kiện broadcast và đăng ký hàm gọi lại sự kiện
    Channel\Client::on('broadcast', function($event_data) use ($worker){
        // Phát tin nhắn broadcast đến tất cả các kết nối của quá trình worker hiện tại
        foreach ($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // Sử dụng dữ liệu từ client như dữ liệu sự kiện
   $event_data = $data;
   // Phát sự kiện broadcast đến tất cả các quá trình worker
   \Channel\Client::publish('broadcast', $event_data);
};

Worker::runAll();

Kiểm tra

Mở trình duyệt chrome, nhấn F12 để mở bảng điều khiển gỡ lỗi, trong mục Console, nhập (hoặc đặt đoạn mã sau vào trang HTML và chạy bằng JavaScript)

Kết nối nhận tin nhắn

// Thay đổi 127.0.0.1 thành địa chỉ IP thực của Workerman
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e){
    alert("Nhận được tin nhắn từ máy chủ: " + e.data);
};

Phát tin nhắn broadcast

ws.send('Xin chào thế giới');