Heim >PHP-Framework >Workerman >Workerman-Entwicklungspraxis: Aufbau eines effizienten Instant-Messaging-Systems

Workerman-Entwicklungspraxis: Aufbau eines effizienten Instant-Messaging-Systems

PHPz
PHPzOriginal
2023-08-05 14:03:151184Durchsuche

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.

  1. 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.

  2. Server erstellen:
    Erstellen Sie eine neue PHP-Datei mit dem Namen server.php, um den Server des Instant Messaging-Systems zu erstellen. In die Datei server.php müssen wir den folgenden Code schreiben:
<?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.

  1. Client erstellen:
    Erstellen Sie eine neue PHP-Datei mit dem Namen client.php, die zum Erstellen des Clients des Instant Messaging-Systems verwendet wird. In die Datei client.php müssen wir den folgenden Code schreiben:
<?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.

  1. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn