Maison > base de données > Redis > Implémenter le transfert des messages d'abonnement de Redis vers le client WebSocket

Implémenter le transfert des messages d'abonnement de Redis vers le client WebSocket

藏色散人
Libérer: 2020-06-13 16:08:22
avant
2946 Les gens l'ont consulté

Implémenter le transfert des messages d'abonnement de Redis vers le client WebSocket

L'extension redis de PHP bloque les IO Lors de l'utilisation du mode abonnement/publication, l'ensemble du processus sera bloqué. Par conséquent, il doit être implémenté à l’aide du client asynchrone SwooleRedis.

Exemple de code

$server = new swoole_websocket_server("0.0.0.0", 9501);
$server->on('workerStart', function ($server, $workerId) {
    $client = new swoole_redis;
    $client->on('message', function (swoole_redis $client, $result) use ($server) {
        if ($result[0] == 'message') {
            foreach($server->connections as $fd) {
                $server->push($fd, $result[1]);
            }
        }
    });
    $client->connect('127.0.0.1', 6379, function (swoole_redis $client, $result) {
        $client->subscribe('msg_0');
    });
});
$server->on('open', function ($server, $request) {
});
$server->on('message', function (swoole_websocket_server $server, $frame) {
    $server->push($frame->fd, "hello");
});
$server->on('close', function ($serv, $fd) {
});
$server->start();
Copier après la connexion

Processus d'implémentation

Le client SwooleRedis est créé au démarrage du processus (onWorkerStart) et connecté à Serveur Redis

Une fois la connexion réussie, abonnez-vous au message du sujet msg_0

Lorsqu'il y a un nouveau message, SwooleRedis déclenchera le rappel de l'événement onMessage

Utilisez $server dans cette fonction de rappel ->les connexions parcourent toutes les connexions sur le serveur et envoient des messages

Recommandations associées : "rtutoriel edis"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal