# on
**``` (La version de Workerman doit être >= 3.3.0) ```**
```php
void \Channel\Client::on(string $event_name, callback $callback_function)

S'abonner à l'événement $event_name et enregistrer la fonction de rappel $callback_function lorsque l'événement se produit.

Paramètres de la fonction de rappel

$event_name

Le nom de l'événement auquel s'abonner, qui peut être n'importe quelle chaîne de caractères.

$callback_function

La fonction de rappel déclenchée lorsque l'événement se produit. Le prototype de la fonction est callback_function(mixed $event_data). $event_data est la donnée de l'événement transmise lors de sa publication.

Remarque:

Si deux fonctions de rappel sont enregistrées pour le même événement, la deuxième fonction de rappel remplacera la première.

Exemple

Worker multi-processus (multi-serveurs), un client envoie un message qui est diffusé à tous les clients

start.php

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

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

// Serveur websocket
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// Au démarrage de chaque processus worker
$worker->onWorkerStart = function($worker)
{
    // Le client Channel se connecte au serveur Channel
    Channel\Client::connect('127.0.0.1', 2206);
    // S'abonner à l'événement de diffusion (broadcast) et enregistrer la fonction de rappel de l'événement
    Channel\Client::on('broadcast', function($event_data)use($worker){
        // Diffuser le message à tous les clients du processus worker actuel
        foreach($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // Utiliser les données envoyées par le client comme données de l'événement
   $event_data = $data;
   // Publier l'événement de diffusion (broadcast) à tous les processus worker
   \Channel\Client::publish('broadcast', $event_data);
};

Worker::runAll();

Test

Ouvrez le navigateur Chrome, appuyez sur F12 pour ouvrir la console de débogage, dans la section Console, saisissez (ou placez le code ci-dessous dans une page HTML et exécutez-le avec JavaScript)

Connexion pour recevoir les messages

// Remplacer 127.0.0.1 par l'adresse IP réelle où se trouve Workerman
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
    alert("Message reçu du serveur : " + e.data);
};

Diffuser un message

ws.send('bonjour tout le monde');