on

(richiede Workerman versione >= 3.3.0)

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

Iscrive all'evento $event_name e registra la funzione di callback $callback_function da eseguire quando l'evento si verifica.

Parametri della funzione di callback

$event_name

Nome dell'evento a cui ci si iscrive, può essere una qualsiasi stringa.

$callback_function

Funzione di callback attivata quando si verifica l'evento. La firma della funzione è callback_function(mixed $event_data). $event_data sono i dati dell'evento trasmessi durante la pubblicazione (publish) dell'evento.

Attenzione:

Se lo stesso evento ha due funzioni di callback registrate, la funzione di callback successiva sovrascriverà la precedente.

Esempio

Worker multiprocesso (più server), un client invia un messaggio, broadcast a tutti i client

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;
// All'avvio di ogni processo worker
$worker->onWorkerStart = function($worker)
{
    // Il client Channel si connette al server Channel
    Channel\Client::connect('127.0.0.1', 2206);
    // Iscrive all'evento broadcast e registra la callback dell'evento
    Channel\Client::on('broadcast', function($event_data)use($worker){
        // Broadcast del messaggio a tutti i client del processo worker corrente
        foreach($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // Tratta i dati inviati dal client come dati dell'evento
   $event_data = $data;
   // Pubblica l'evento 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, nella sezione Console inserisci (o metti il codice qui sotto in una pagina html per eseguirlo in js)

Connessione per ricevere messaggi

// Sostituisci 127.0.0.1 con l'ip effettivo dove si trova workerman
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
    alert("Messaggio ricevuto dal server: " + e.data);
};

Messaggio broadcast

ws.send('hello world');