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 callback được gọi khi sự kiện xảy ra $callback_function
Tham số của hàm callback
$event_name
Tên sự kiện đã đăng ký, có thể là bất kỳ chuỗi nào.
$callback_function
Hàm callback được gọi khi sự kiện xảy ra. Chữ ký hàm là callback_function(mixed $event_data). $event_data là dữ liệu sự kiện được truyền khi sự kiện được phát (publish).
Chú ý:
Nếu cùng một sự kiện được đăng ký hai hàm callback, hàm callback sau sẽ ghi đè hàm callback 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, phát sóng cho tất 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;
// Khi mỗi tiến trình worker khởi động
$worker->onWorkerStart = function($worker)
{
// Kết nối Channel client đến máy chủ Channel
Channel\Client::connect('127.0.0.1', 2206);
// Đăng ký sự kiện broadcast và đăng ký hàm callback
Channel\Client::on('broadcast', function($event_data)use($worker){
// Phát sóng tin nhắn đến tất cả khách hàng của tiến trình worker hiện tại
foreach($worker->connections as $connection)
{
$connection->send($event_data);
}
});
};
$worker->onMessage = function(TcpConnection $connection, $data)
{
// Lấy dữ liệu từ khách hàng như là dữ liệu sự kiện
$event_data = $data;
// Phát sóng sự kiện broadcast đến tất cả các tiến 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, nhập vào mục Console (hoặc đặt đoạn mã dưới đây vào trang html và chạy bằng js)
Kết nối nhận tin nhắn
// Thay 127.0.0.1 bằng đị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 sóng tin nhắn
ws.send('hello world');