# on
**``` (Workerman version >= 3.3.0 is required) ```**
```php
void \Channel\Client::on(string $event_name, callback $callback_function)

Subscreva o evento $event_name e registre a função de retorno de chamada $callback_function quando o evento ocorrer.

Parâmetros da função de retorno de chamada

$event_name

O nome do evento subscrito, pode ser qualquer string.

$callback_function

A função de retorno de chamada acionada quando o evento ocorre. O protótipo da função é callback_function(mixed $event_data). $event_data é os dados do evento passados quando o evento é publicado.

Observação:

Se duas funções de retorno de chamada forem registradas para o mesmo evento, a segunda substituirá a primeira.

Exemplo

Worker multi-process (multi-servidor), um cliente envia uma mensagem e transmite para todos os clientes.

start.php

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

// Inicializa um 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;
// Quando cada processo worker é iniciado
$worker->onWorkerStart = function($worker)
{
    // Conecta o cliente Channel ao servidor Channel
    Channel\Client::connect('127.0.0.1', 2206);
    // Subscreve o evento broadcast e registra a função de retorno de chamada do evento
    Channel\Client::on('broadcast', function($event_data)use($worker){
        // Transmite uma mensagem para todos os clientes do processo worker atual
        foreach($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // Usa os dados enviados pelo cliente como dados do evento
   $event_data = $data;
   // Publica o evento broadcast para todos os processos worker
   \Channel\Client::publish('broadcast', $event_data);
};

Worker::runAll();

Teste

Abra o navegador Chrome, pressione F12 para abrir o console de depuração e, na guia Console, insira (ou insira o código a seguir em uma página HTML e execute com JS)

Conexão que recebe mensagens

// Altere 127.0.0.1 para o IP real onde o Workerman está localizado
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
    alert("Mensagem recebida do servidor: " + e.data);
};

Transmissão de mensagens

ws.send('olá mundo');