Comment diffuser (multidiffuser) des données
Exemple (diffusion programmée)
use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:2020');
// Dans cet exemple, le nombre de processus doit être de 1
$worker->count = 1;
// Lors du démarrage du processus, un minuteur est défini pour envoyer des données à tous les clients connectés
$worker->onWorkerStart = function($worker)
{
// À intervalles réguliers, toutes les 10 secondes
Timer::add(10, function()use($worker)
{
// Parcourt toutes les connexions des clients dans le processus actuel et envoie l'heure actuelle du serveur
foreach($worker->connections as $connection)
{
$connection->send(time());
}
});
};
// Exécuter le worker
Worker::runAll();
Exemple (chat de groupe)
use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:2020');
// Dans cet exemple, le nombre de processus doit être de 1
$worker->count = 1;
// Lorsque le client envoie un message, diffusez-le aux autres utilisateurs
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
foreach($worker->connections as $connection)
{
$connection->send($message);
}
};
// Exécuter le worker
Worker::runAll();
Remarques :
Monoprocessus :
Les exemples ci-dessus ne peuvent être exécutés qu'en monoprocessus ($worker->count=1), car en multiprocessus, plusieurs clients peuvent se connecter à différents processus, les clients entre processus sont isolés et ne peuvent pas communiquer directement, c'est-à-dire qu'il n'est pas possible pour le processus A de directement manipuler l'objet de connexion du processus B pour envoyer des données. (Pour y parvenir, une communication inter-processus est nécessaire, par exemple en utilisant le composant Channel, comme dans exemple - envoi de cluster, exemple - envoi de groupe).
Utiliser GatewayWorker
Le cadre GatewayWorker, développé sur la base de Workerman, propose un mécanisme de diffusion plus pratique, y compris le multicast, la diffusion, etc. Il permet de configurer plusieurs processus et même un déploiement sur plusieurs serveurs. Si vous avez besoin de diffuser des données aux clients, nous vous recommandons d'utiliser le cadre GatewayWorker.
Adresse de la documentation de GatewayWorker https://doc2.workerman.net