Fortgeschrittene Workerman-Netzwerkprogrammierung: Implementierung eines Instant-Messaging-Systems mit hoher Parallelität
Mit der Popularität des mobilen Internets spielen Instant-Messaging-Systeme eine immer wichtigere Rolle in unserem Leben. Die Implementierung eines hochgradig gleichzeitigen Instant-Messaging-Systems ist ein wichtiger Meilenstein für das Erlernen der Netzwerkprogrammierung. In diesem Artikel werden wir das Workerman-Framework verwenden, um ein hochgradig gleichzeitiges Instant-Messaging-System zu implementieren, und den Implementierungsprozess anhand von Codebeispielen detailliert vorstellen.
Zuerst müssen wir das Workerman-Framework installieren. Workerman ist ein leichtes PHP-Framework für die asynchrone Netzwerkprogrammierung. Es bietet umfangreiche Netzwerkprogrammierungsfunktionen und kann unsere Anforderungen an die Implementierung eines Instant-Messaging-Systems mit hoher Parallelität erfüllen. Workerman kann über Composer installiert werden und den folgenden Befehl ausführen:
composer require workerman/workerman
Nach Abschluss der Installation können wir mit dem Schreiben des Codes beginnen, um ein Instant-Messaging-System mit hoher Parallelität zu implementieren.
Zuerst erstellen wir eine Serverklasse, um Clientverbindungen und das Senden von Nachrichten zu verwalten. Das Codebeispiel lautet wie folgt:
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();
Im obigen Code erstellen wir zunächst ein Workerman-Worker-Objekt und setzen seine Abhöradresse und seinen Port auf websocket://0.0.0.0:8000. Anschließend werden drei Rückruffunktionen definiert, um die Verbindung des Clients, die empfangene Nachricht bzw. die Trennung zu verarbeiten. In der Rückruffunktion onConnect verwenden wir SplObjectStorage, um alle Client-Verbindungsobjekte zu speichern. In der Rückruffunktion onMessage durchlaufen wir alle Client-Verbindungsobjekte und senden die empfangene Nachricht an jeden Client. In der Rückruffunktion onClose löschen wir das getrennte Clientobjekt aus SplObjectStorage.
Als nächstes erstellen wir eine Client-Seite, um eine Verbindung zum Server herzustellen und Nachrichten zu senden und zu empfangen. Das Codebeispiel lautet wie folgt:
<!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>
Im obigen Code erstellen wir ein Websocket-Verbindungsobjekt und stellen eine Verbindung zur Serveradresse ws://localhost:8000 her. Anschließend werden die Handlerfunktionen für die Ereignisse onopen, onmessage und subscribe definiert. In der Onmessage-Rückruffunktion erstellen wir ein div-Element und fügen die empfangene Nachricht zum div-Element hinzu und fügen dann das div-Element zum message-Element auf der Seite hinzu. In der Handlerfunktion des Submit-Ereignisses holen wir uns den Text im Eingabefeld und senden ihn an den Server.
Speichern Sie die beiden oben genannten Codeteile jeweils als server.php- und client.html-Dateien. Führen Sie den folgenden Befehl in der Befehlszeile aus:
php server.php start
Öffnen Sie dann die Datei client.html in Ihrem Browser. Sie können auf eine über WebSocket implementierte Instant-Messaging-Systemseite zugreifen. Nachdem sich mehrere Clients mit dem Server verbunden haben, können Nachrichten in Echtzeit gesendet und in der Nachrichtenliste angezeigt werden.
Zusammenfassung:
Durch die obigen Codebeispiele haben wir ein Instant-Messaging-System mit hoher Parallelität implementiert, das auf dem Workerman-Framework basiert, von der Erstellung von Serverklassen bis zur Erstellung von Clientseiten. Durch die Untersuchung dieses Beispiels erhalten wir ein tieferes Verständnis der Verarbeitung hoher Parallelität in der Netzwerkprogrammierung. Gleichzeitig haben wir auch die Leistungsfähigkeit und Einfachheit des Workerman-Frameworks kennengelernt, das es uns ermöglicht, leistungsstarke Netzwerkanwendungen schneller zu entwickeln. Ich hoffe, dass dieser Artikel Ihnen beim Erlernen der Netzwerkprogrammierung und der Verwendung des Workerman-Frameworks hilfreich sein wird.
Das obige ist der detaillierte Inhalt vonFortgeschrittene Workerman-Netzwerkprogrammierung: Implementierung eines Instant-Messaging-Systems mit hoher Parallelität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!