on

(requerido Workerman versión >=3.3.0)

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

Suscribirse al evento $event_name y registrar una función de callback $callback_function que se ejecutará cuando ocurra el evento.

Parámetros de la función de callback

$event_name

Nombre del evento al que se suscribe, puede ser cualquier cadena de caracteres.

$callback_function

Función de callback que se activa cuando ocurre el evento. El prototipo de la función es callback_function(mixed $event_data). $event_data es la información del evento que se pasa al publicar (publish) el evento.

Nota:

Si se registran dos funciones de callback para el mismo evento, la última función de callback sobrescribirá la anterior.

Ejemplo

Worker multiproceso (múltiples servidores), un cliente envía un mensaje, el mensaje se transmite a todos los clientes

start.php

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

// Inicializar un servidor Channel
$channel_server = new Channel\Server('0.0.0.0', 2206);

// servidor websocket
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// Cada proceso worker al iniciar
$worker->onWorkerStart = function($worker)
{
    // Cliente de Channel se conecta al servidor Channel
    Channel\Client::connect('127.0.0.1', 2206);
    // Suscribirse al evento broadcast y registrar la callback
    Channel\Client::on('broadcast', function($event_data) use($worker){
        // Enviar mensaje a todos los clientes en el proceso worker actual
        foreach($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // Tratar los datos enviados por el cliente como datos del evento
   $event_data = $data;
   // Publicar el evento broadcast a todos los procesos worker
   \Channel\Client::publish('broadcast', $event_data);
};

Worker::runAll();

Prueba

Abre el navegador Chrome, presiona F12 para abrir la consola de depuración, e ingresa en la sección Console (o coloca el código a continuación en la página html para ejecutarlo con js)

Conexión para recibir mensajes

// Cambia 127.0.0.1 por la IP donde se encuentra Workerman
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
    alert("Mensaje recibido del servidor: " + e.data);
};

Enviar mensaje de difusión

ws.send('hello world');