# on

**(Richiede Workerman versione >=3.3.0)**

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

Sottoscrive all'evento $event_name e registra la funzione di callback $callback_function al verificarsi dell'evento.

Parametri della funzione di callback

$event_name

Nome dell'evento sottoscritto, può essere una stringa qualsiasi.

$callback_function

Funzione di callback scatenata al verificarsi dell'evento. Il prototipo della funzione è callback_function(mixed $event_data). $event_data è il dato dell'evento trasmesso al momento della pubblicazione.

Nota:

Se si registra più di una funzione di callback per lo stesso evento, l'ultima funzione di callback registrata sovrascrive la precedente.

Esempio

Worker multiprocesso (multi-server), un client invia un messaggio, lo trasmette a tutti i clienti.

start.php

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

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

// Server websocket
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// Ogni volta che un processo worker si avvia
$worker->onWorkerStart = function($worker)
{
    // Il client di Channel si connette al server Channel
    Channel\Client::connect('127.0.0.1', 2206);
    // Sottoscrive all'evento di broadcast e registra la funzione di callback per l'evento
    Channel\Client::on('broadcast', function($event_data)use($worker){
        // Trasmette il messaggio a tutti i client del processo worker attuale
        foreach($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // Usa i dati inviati dal client come dato dell'evento
   $event_data = $data;
   // Pubblica l'evento di broadcast a tutti i processi worker
   \Channel\Client::publish('broadcast', $event_data);
};

Worker::runAll();

Test

Apri il browser Chrome, premi F12 per aprire la console di debug, e inserisci il seguente codice nella console (oppure inserisci il codice HTML nella pagina e eseguilo tramite JavaScript).

Connetti il messaggio ricevuto

// 127.0.0.1 deve essere sostituito con l'effettivo indirizzo IP di Workerman
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
    alert("Messaggio ricevuto dal server: " + e.data);
};

Trasmetti il messaggio a tutti

ws.send('ciao mondo');