Maison >cadre php >Workerman >Programmation réseau Workerman avancée : mise en œuvre d'un système de messagerie instantanée à haute concurrence

Programmation réseau Workerman avancée : mise en œuvre d'un système de messagerie instantanée à haute concurrence

WBOY
WBOYoriginal
2023-08-05 16:09:071136parcourir

Programmation réseau Workerman avancée : mise en œuvre d'un système de messagerie instantanée à haute concurrence

Avec la popularité de l'Internet mobile, les systèmes de messagerie instantanée jouent un rôle de plus en plus important dans nos vies. La mise en œuvre d'un système de messagerie instantanée hautement concurrent est une étape importante dans l'apprentissage de la programmation réseau. Dans cet article, nous utiliserons le framework Workerman pour implémenter un système de messagerie instantanée hautement concurrent et présenterons le processus d'implémentation en détail à travers des exemples de code.

Tout d'abord, nous devons installer le framework Workerman. Workerman est un framework de programmation réseau asynchrone PHP léger. Il fournit des fonctions de programmation réseau riches et peut répondre à nos besoins de mise en œuvre d'un système de messagerie instantanée à haute concurrence. Workerman peut être installé via composer et exécuter la commande suivante :

composer require workerman/workerman

Une fois l'installation terminée, nous pouvons commencer à écrire le code pour implémenter un système de messagerie instantanée à haute concurrence.

  1. Créer une classe de serveur

Tout d'abord, nous créons une classe de serveur pour gérer les connexions client et l'envoi de messages. L'exemple de code est le suivant :

use WorkermanWorker;

class ChatServer
{
    protected $clients;
    
    public function __construct()
    {
        $this->clients = new SplObjectStorage;
        
        $ws_worker = new Worker('websocket://0.0.0.0:8000');
        
        $ws_worker->onConnect = function($connection) {
            $this->clients->attach($connection);
            echo "New client connected
";
        };
        
        $ws_worker->onMessage = function($connection, $data) {
            // 处理接收到的消息
            foreach ($this->clients as $client) {
                $client->send($data);
            }
        };
        
        $ws_worker->onClose = function($connection) {
            $this->clients->detach($connection);
            echo "Client disconnected
";
        };
        
        Worker::runAll();
    }
}

new ChatServer();

Dans le code ci-dessus, nous créons d'abord un objet Workerman Worker et définissons son adresse d'écoute et son port sur websocket://0.0.0.0:8000. Ensuite, trois fonctions de rappel sont définies pour gérer respectivement la connexion du client, le message reçu et la déconnexion. Dans la fonction de rappel onConnect, nous utilisons SplObjectStorage pour enregistrer tous les objets de connexion client. Dans la fonction de rappel onMessage, nous parcourons tous les objets de connexion client et envoyons le message reçu à chaque client. Dans la fonction de rappel onClose, nous supprimons l'objet client déconnecté de SplObjectStorage.

  1. Créer une page client

Ensuite, nous créons une page client pour nous connecter au serveur et envoyer et recevoir des messages. L'exemple de code est le suivant :

<!DOCTYPE html>
<html>
<head>
    <title>Chat App</title>
    <style>
        #messages {
            height: 300px;
            overflow-y: scroll;
        }
    </style>
</head>
<body>
    <div id="messages"></div>
    <form id="form">
        <input type="text" id="message" autocomplete="off">
        <button>Send</button>
    </form>

    <script>
        const messages = document.getElementById('messages');
        const form = document.getElementById('form');
        const input = document.getElementById('message');
        
        const ws = new WebSocket('ws://localhost:8000');
        
        ws.onopen = function() {
            console.log('Connected to the server');
        };
        
        ws.onmessage = function(event) {
            const message = document.createElement('div');
            message.textContent = event.data;
            messages.appendChild(message);
        };
        
        form.addEventListener('submit', function(event) {
            event.preventDefault();
            
            const message = input.value;
            input.value = '';
            
            ws.send(message);
        });
    </script>
</body>
</html>

Dans le code ci-dessus, nous créons un objet de connexion websocket et nous connectons à l'adresse du serveur ws://localhost:8000. Ensuite, les fonctions de gestionnaire pour les événements onopen, onmessage et submit sont définies. Dans la fonction de rappel onmessage, nous créons un élément div et ajoutons le message reçu à l'élément div, puis ajoutons l'élément div à l'élément messages sur la page. Dans la fonction de gestionnaire de l'événement submit, nous récupérons le texte dans la zone de saisie et l'envoyons au serveur.

  1. Exécutez le code

Enregistrez les deux morceaux de code ci-dessus respectivement sous les fichiers server.php et client.html. Exécutez la commande suivante dans la ligne de commande :

php server.php start

Ouvrez ensuite le fichier client.html dans votre navigateur. Vous pouvez accéder à une page du système de messagerie instantanée implémentée via WebSocket. Une fois que plusieurs clients se sont connectés au serveur, les messages peuvent être envoyés en temps réel et affichés dans la liste des messages.

Résumé :

Grâce aux exemples de code ci-dessus, nous avons implémenté un système de messagerie instantanée à haute concurrence basé sur le framework Workerman, de la création de classes de serveur à la création de pages client. En étudiant cet exemple, nous avons une compréhension plus approfondie du traitement à haute concurrence dans la programmation réseau. Dans le même temps, nous avons également découvert la puissance et la simplicité du framework Workerman, qui nous permet de développer plus rapidement des applications réseau puissantes. J'espère que cet article vous sera utile pour apprendre la programmation réseau et utiliser le framework Workerman.

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:
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