Maison cadre php Swoole Intégration de Swoole et Redis : créez rapidement un système de messagerie instantanée à haute disponibilité

Intégration de Swoole et Redis : créez rapidement un système de messagerie instantanée à haute disponibilité

Jun 13, 2023 am 09:55 AM
redis 高可用性 swoole

Avec l'essor de l'Internet mobile, le système de messagerie instantanée (MI) est devenu un élément indispensable de notre vie quotidienne. Par conséquent, développer un système de messagerie instantanée pratique et performant est devenu l'un des objectifs poursuivis par de nombreux développeurs. Dans ce processus, Swoole et Redis sont deux outils de performance couramment utilisés qui peuvent nous aider à créer rapidement un système de messagerie instantanée à haute disponibilité.

Cet article présentera les concepts et principes de base de Swoole et Redis, et présentera un cas d'architecture de système de messagerie instantanée et un plan de mise en œuvre basé sur ces deux outils. J'espère qu'à travers cet article, les lecteurs pourront comprendre comment utiliser ces deux outils pour créer un système de messagerie instantanée hautes performances.

1. Présentation de Swoole et Redis

1.1 Swoole

Swoole est un framework réseau avancé basé sur PHP. Il s'agit d'un moteur côté serveur entièrement asynchrone et hautes performances qui prend en charge les protocoles TCP, UDP, WebSocket et HTTP. Swoole peut grandement améliorer les performances et la concurrence des processus PHP, principalement grâce à son mécanisme de réaction basé sur epoll ou kqueue, qui utilise la technologie coroutine pour implémenter une programmation asynchrone non bloquante.

1.2 Redis

Redis est une base de données clé-valeur open source en mémoire qui prend en charge une variété de structures de données, notamment des chaînes, des hachages, des listes, des ensembles et des ensembles ordonnés. Redis offre des performances et une évolutivité élevées et peut gérer des millions de requêtes simultanées. Redis est principalement utilisé dans des scénarios tels que la mise en cache, les files d'attente de messages et les verrous distribués.

2. Intégration de Swoole et Redis

2.1 Comment Swoole fonctionne avec Redis

Il existe généralement deux façons d'utiliser Redis dans Swoole :

  • Utiliser le client Swoole Redis
  • Utiliser le client Swoole Coroutine Redis

Parmi elles, le client Swoole Redis est un client Redis traditionnel et doit utiliser des fonctions de rappel pour traiter les réponses aux demandes ; tandis que le client Coroutine Redis traite les demandes et les réponses via des coroutines, ce qui est plus pratique et efficace à utiliser.

2.2 Description de l'architecture

Afin d'établir une communication en temps réel, les systèmes de messagerie instantanée utilisent généralement le protocole WebSocket pour transmettre des messages. Dans cet article, nous allons construire un serveur WebSocket basé sur Swoole et Redis. Les messages envoyés par le client seront enregistrés dans Redis puis transmis aux autres clients via le serveur.

    1. Le client envoie un message au serveur WebSocket
    1. Le serveur WebSocket enregistre le message sur Redis
    1. Redis envoie le message au serveur
    1. Le serveur WebSocket pousse messages à d'autres clients

3. Plan de mise en œuvre

Ensuite, nous présenterons le plan de mise en œuvre en détail pour chaque étape.

3.1 Code du serveur

(1) Démarrez le serveur WebSocket

Utilisez l'API du serveur WebSocket fournie par Swoole pour démarrer le serveur. Le code est le suivant :

$server = new SwooleWebSocketServer("0.0.0.0", 9501);

$server->on('open', function (SwooleWebSocketServer $server, $frame) {
    echo "connection open
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    $redis = new SwooleCoroutineRedis();
    $redis->connect('127.0.0.1', 6379);
    $redis->lPush('messages', $frame->data);
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    echo "connection close
";
});

$server->start();
Copier après la connexion

Dans ce code, nous utilisons le $server-> Fonction on() pour définir les fonctions de rappel d'événement d'ouverture, de message et de fermeture de WebSocket. Lorsque le client se connecte au serveur, le code de la fonction open sera exécuté ; lorsque le client envoie un message au serveur, le code de la fonction de message sera exécuté. Dans la fonction de message, nous créons un client Coroutine Redis et mettons en cache les messages envoyés par le client dans la file d'attente Redis.

(2) Envoyer des messages au client

Ensuite, nous devons implémenter la logique du serveur qui envoie des messages au client. Ceci peut être réalisé en utilisant la fonction push() fournie par Swoole. Le code est le suivant :

// 推送消息给客户端
$server->tick(1000, function () use ($server) {
    $redis = new SwooleCoroutineRedis();
    $redis->connect('127.0.0.1', 6379);

    while ($message = $redis->rPop('messages')) {
        foreach ($server->connections as $fd) {
            $server->push($fd, $message);
        }
    }
});
Copier après la connexion

Dans ce code, nous utilisons la fonction tick() fournie par Swoole pour exécuter le code régulièrement, utilisons le client Coroutine Redis pour récupérer le message de Redis et les messages Push à tous les clients.

3.2 Code client

Le code client est relativement simple. Il nous suffit d'utiliser le client WebSocket pour nous connecter au serveur WebSocket et envoyer et recevoir des données via JavaScript. Le code est le suivant :

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>IM System</title>
</head>
<body>
    <h1>IM System</h1>
    <form>
        <label for="name">Name:</label>
        <input type="text" id="name">
        <br><br>
        <label for="message">Message:</label>
        <input type="text" id="message">
        <br><br>
        <input type="submit" value="Send Message">
    </form>
    <br><br>
    <div id="message-list"></div>
    <script>
        var socket = new WebSocket('ws://localhost:9501');

        socket.onopen = function(event) {
            console.log('WebSocket connect succeed');
        };

        socket.onmessage = function(event) {
            var message = JSON.parse(event.data);

            var messageList = document.getElementById('message-list');
            var p = document.createElement('p');
            p.innerText = message.name + ": " + message.message;
            messageList.prepend(p);
        };

        document.querySelector('form').addEventListener('submit', function(event) {
            event.preventDefault();

            var name = document.getElementById('name').value;
            var message = document.getElementById('message').value;

            socket.send(JSON.stringify({
                name: name,
                message: message
            }));

            document.getElementById('message').value = "";
        });
    </script>
</body>
</html>
Copier après la connexion

Dans ce code, nous utilisons d'abord le client WebSocket pour nous connecter au serveur WebSocket. Lorsque le client se connecte avec succès, nous pouvons envoyer des messages au serveur via la méthode send() de l'objet WebSocket en JavaScript. Nous devons également définir la fonction de rappel onmessage pour recevoir les messages envoyés par le serveur.

4. Résumé

Dans cet article, nous avons présenté les concepts et principes de base de Swoole et Redis, et partagé un cas d'architecture de serveur WebSocket et un plan de mise en œuvre basé sur Swoole et Redis. Grâce à ce cas, nous pouvons découvrir comment Swoole et Redis travaillent ensemble pour créer un système de messagerie instantanée hautes performances et haute disponibilité.

Bien sûr, ce n'est qu'un exemple simple. En pratique, de nombreux aspects doivent être pris en compte, comme la sécurité, l'optimisation des performances, etc. J'espère que les lecteurs pourront en apprendre davantage sur l'utilisation de ces deux outils à travers cet article. J'espère également que les lecteurs pourront continuer à étudier en profondeur ces deux outils et d'autres technologies associées et apporter davantage de contributions au développement d'applications hautes performances.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment effacer les données redis Comment effacer les données redis Apr 10, 2025 pm 10:06 PM

Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

Comment utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

Comment lire la file d'attente redis Comment lire la file d'attente redis Apr 10, 2025 pm 10:12 PM

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

Comment utiliser Redis Lock Comment utiliser Redis Lock Apr 10, 2025 pm 08:39 PM

L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

Comment lire le code source de Redis Comment lire le code source de Redis Apr 10, 2025 pm 08:27 PM

La meilleure façon de comprendre le code source redis est d'aller étape par étape: familiarisez-vous avec les bases de Redis. Sélectionnez un module ou une fonction spécifique comme point de départ. Commencez par le point d'entrée du module ou de la fonction et affichez le code ligne par ligne. Affichez le code via la chaîne d'appel de fonction. Familiez les structures de données sous-jacentes utilisées par Redis. Identifiez l'algorithme utilisé par Redis.

Comment faire du message middleware pour redis Comment faire du message middleware pour redis Apr 10, 2025 pm 07:51 PM

Redis, en tant que Message Middleware, prend en charge les modèles de consommation de production, peut persister des messages et assurer une livraison fiable. L'utilisation de Redis comme Message Middleware permet une faible latence, une messagerie fiable et évolutive.

Comment démarrer le serveur avec redis Comment démarrer le serveur avec redis Apr 10, 2025 pm 08:12 PM

Les étapes pour démarrer un serveur Redis incluent: Installez Redis en fonction du système d'exploitation. Démarrez le service Redis via Redis-Server (Linux / MacOS) ou Redis-Server.exe (Windows). Utilisez la commande redis-Cli Ping (Linux / MacOS) ou redis-Cli.exe Ping (Windows) pour vérifier l'état du service. Utilisez un client redis, tel que redis-cli, python ou node.js pour accéder au serveur.

See all articles