Heim >PHP-Framework >Workerman >Workerman-Entwicklungspraxis: Aufbau eines effizienten Instant-Messaging-Systems
Workerman Development Practice: Aufbau eines effizienten Instant-Messaging-Systems
Einführung:
Mit der rasanten Entwicklung des Internets und der steigenden Nachfrage der Benutzer nach Echtzeitkommunikation sind Instant-Messaging-Systeme zu einem beliebten Entwicklungsfeld geworden. Um verschiedene Echtzeit-Kommunikationsanforderungen zu erfüllen, können wir das PHP-Open-Source-Framework Workerman verwenden, um ein effizientes und stabiles Instant-Messaging-System aufzubauen. In diesem Artikel wird erläutert, wie Sie mit dem Workerman-Framework ein leistungsstarkes Instant-Messaging-System entwickeln, und es werden Codebeispiele angehängt.
Workerman installieren:
Zuerst müssen wir das Workerman-Framework installieren. Führen Sie den folgenden Befehl im Terminal aus, um Workerman zu installieren:
composer require workerman/workerman
Nachdem die Installation abgeschlossen ist, können wir mit dem Aufbau des Instant-Messaging-Systems beginnen.
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; // 创建一个Worker监听2345端口,使用websocket协议通信 $ws_worker = new Worker("websocket://0.0.0.0:2345"); // 设置进程数 $ws_worker->count = 4; // 当客户端连接时 $ws_worker->onConnect = function($connection){ echo "New connection "; }; // 当客户端发送消息时 $ws_worker->onMessage = function($connection, $data){ foreach($connection->worker->connections as $clientConnection){ $clientConnection->send($data); } }; // 当客户端断开连接时 $ws_worker->onClose = function($connection){ echo "Connection closed "; }; // 运行worker Worker::runAll();
Der obige Code erstellt ein Worker-Objekt, lauscht auf Port 2345 und kommuniziert über das WebSocket-Protokoll. Wenn der Client verbunden ist, wird „Neue Verbindung“ ausgegeben; wenn der Client eine Nachricht sendet, wird die Nachricht an alle verbundenen Clients gesendet; wenn der Client getrennt wird, wird „Verbindung geschlossen“ ausgegeben. Verwenden Sie abschließend die Methode Worker::runAll(), um den Worker auszuführen.
<?php require_once __DIR__.'/vendor/autoload.php'; use WorkermanWorker; use WorkermanAutoloader; use WorkermanConnectionAsyncTcpConnection; $connect_list = array(); // 当用户输入消息时 function onMessage($connect) { // 从终端读取用户输入的消息 $message = trim(fgets(STDIN)); // 发送消息到服务端 $connect->send($message); } // 创建一个异步TCP连接到服务端 $connect = new AsyncTcpConnection('ws://127.0.0.1:2345'); $connect->onConnect = function($connection){ echo "Connected to server "; }; $connect->onMessage = function($connection, $data){ echo "Received message: ".$data." "; }; $connect->onClose = function($connection){ echo "Disconnected from server "; }; // 运行连接 $connect->connect(); // 将连接对象保存到连接列表中 $connect_list[] = $connect; // 监听用户输入消息 Worker::addWorker(function(){ readline_callback_handler_install('', function(){}); while (true) { if (count($GLOBALS['connect_list']) > 0) { $read = array_values($GLOBALS['connect_list']); $write = null; $except = null; if (false === ($num_changed_streams = stream_select($read, $write, $except, 1))) { continue; } elseif ($num_changed_streams > 0) { foreach($read as $connect) { onMessage($connect); } } } } }); Worker::runAll();
Der obige Code erstellt ein AsyncTcpConnection-Objekt und stellt eine Verbindung zum 2345-Port des Servers her. Bei erfolgreicher Verbindung wird „Mit Server verbunden“ ausgegeben; beim Empfang einer vom Server gesendeten Nachricht wird „Empfangene Nachricht:“ und beim Trennen der Verbindung mit dem Server der spezifische Nachrichteninhalt ausgegeben; " wird ausgegeben. Gleichzeitig wird die vom Benutzer eingegebene Nachricht überwacht und über das Verbindungsobjekt an den Server gesendet.
Führen Sie das Instant Messaging-System aus:
Führen Sie im Terminal die folgenden Befehle aus, um den Server bzw. den Client zu starten:
php server.php php client.php
Nach der Ausführung wechseln der Server und der Client in den Abhörzustand und können sich gegenseitig Nachrichten senden. . Wenn der Server eine von einem Client gesendete Nachricht empfängt, sendet er die Nachricht an alle verbundenen Clients.
Zusammenfassung:
In diesem Artikel haben wir vorgestellt, wie man mit Workerman ein effizientes Instant-Messaging-System entwickelt. Durch den Aufbau des Servers und des Clients und das Schreiben des entsprechenden Codes können wir Echtzeit-Kommunikationsfunktionen erreichen. Workerman bietet einen vollständigen Satz an APIs und Funktionen, sodass wir problemlos ein leistungsstarkes Instant-Messaging-System aufbauen können. Ich hoffe, dieser Artikel ist hilfreich für Sie, vielen Dank fürs Lesen!
Das obige ist der detaillierte Inhalt vonWorkerman-Entwicklungspraxis: Aufbau eines effizienten Instant-Messaging-Systems. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!