Heim > PHP-Framework > Workerman > Hauptteil

Workerman-Entwicklung: So implementieren Sie einen WebSocket-Server

WBOY
Freigeben: 2023-11-07 15:29:01
Original
1304 Leute haben es durchsucht

Workerman-Entwicklung: So implementieren Sie einen WebSocket-Server

So verwenden Sie Workerman zur Implementierung eines WebSocket-Servers

Mit der zunehmenden Beliebtheit der WebRTC-Technologie, Echtzeitkommunikation von Spielen, Online-Chat und anderen Anwendungen wird die WebSocket-Technologie immer wichtiger. Workerman ist ein leistungsstarkes asynchrones TCP-, UDP- und Unix-Socket-Netzwerk-Framework, das in einer PHP-Umgebung ausgeführt wird. Es unterstützt von Natur aus eine hohe Parallelität und eignet sich sehr gut für die Entwicklung von WebSocket-Servern.

In diesem Artikel wird detailliert beschrieben, wie Sie mit Workerman einen WebSocket-Server implementieren, einschließlich der Handhabung von WebSocket-Verbindungen, des Sendens und Empfangens von WebSocket-Nachrichten und der Integration des Frameworks in andere Bibliotheken. Am Ende des Artikels finden Sie außerdem einen vollständigen Beispielcode.

  1. Workerman installieren

Bevor Sie Workerman verwenden, müssen Sie es zuerst installieren. Es kann über Composer installiert werden, oder Sie können den Quellcode direkt von GitHub herunterladen und manuell installieren. Hier nehmen wir die Composer-Installation als Beispiel:

composer require workerman/workerman
Nach dem Login kopieren
Nach dem Login kopieren
  1. WebSocket-Servercode schreiben

Bevor Sie Workerman zum Implementieren des WebSocket-Servers verwenden, müssen Sie zunächst verstehen, wie das WebSocket-Protokoll funktioniert. WebSocket ist ein Vollduplex-Protokoll für lange Verbindungen. Der Client und der Server stellen durch einen Handshake eine Verbindung her und können sich dann gegenseitig Nachrichten senden. WebSocket-Nachrichten können beliebige Daten wie Text, Binärdaten oder sogar Dateien sein und der Server kann sie je nach Nachrichtentyp unterschiedlich verarbeiten.

Die Implementierung eines WebSocket-Servers mit Workerman ist sehr einfach und erfordert nur wenige Codezeilen. Hier ist ein Beispiel:

require_once __DIR__ . '/vendor/autoload.php';
use WorkermanWorker;

// 创建一个Worker监听8090端口,使用websocket协议通讯
$wsWorker = new Worker("websocket://0.0.0.0:8090");

// 启动4个进程对外提供服务
$wsWorker->count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    // 处理消息...
};

// 启动Worker
Worker::runAll();
Nach dem Login kopieren

Zuerst erstellen wir eine Worker-Instanz und geben sie an, um Port 8090 abzuhören und über das Websocket-Protokoll zu kommunizieren. Richten Sie dann vier Prozesse ein, um eine große Anzahl gleichzeitiger Verbindungen zu verarbeiten. Worker unterstützt mehrere Übertragungsprotokolle wie TCP, UDP und Unix Socket, daher müssen wir das WebSocket-Protokoll angeben.

In diesem Beispiel definieren wir nur zwei Rückruffunktionen:

  1. Wenn eine neue WebSocket-Verbindung hergestellt wird, wird die onConnect-Rückruffunktion aufgerufen. Hier können wir Protokolle aufzeichnen, Online-Benutzer zählen und andere Vorgänge ausführen.
  2. Wenn eine WebSocket-Nachricht empfangen wird, wird die Rückruffunktion onMessage aufgerufen. Wir müssen die Nachricht hier verarbeiten, z. B. einfache Berechnungen durchführen, Antworten senden usw.
  3. Der letzte Schritt besteht darin, den Worker zu starten, der beginnt, den angegebenen Port abzuhören und WebSocket-Verbindungen und -Nachrichten zu verarbeiten.
  4. WebSocket-Nachrichtenverarbeitung

Über die onMessage-Rückruffunktion können wir die vom Client gesendete WebSocket-Nachricht empfangen. Das Datenformat kann Text oder Binär sein. Die Art und Weise, wie WebSocket-Nachrichten verarbeitet werden, hängt vom Anwendungsszenario ab. Beispielsweise müssen Online-Chat-Anwendungen möglicherweise Funktionen wie Broadcasting und Punkt-zu-Punkt-Chat implementieren, während Spieleanwendungen Echtzeitkommunikation auf Mikrosekundenebene implementieren müssen.

Hier ist ein einfaches Beispiel, das die empfangene Nachricht ausdruckt und dem Client antwortet:

$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $connection->send("Received: {$data}");
};
Nach dem Login kopieren

Status der WebSocket-Verbindung

Nachdem die WebSocket-Verbindung hergestellt wurde, bleibt die Verbindung zwischen dem Client und dem Server offen. Durch die Rückruffunktion onClose können wir den Fall einer Verbindungsunterbrechung bewältigen:

$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};
Nach dem Login kopieren
  1. Integrationsframework

Workerman kann problemlos in andere Frameworks integriert werden. Hier nehmen wir das Laravel-Framework als Beispiel, um vorzustellen, wie Workerman zum Implementieren eines WebSocket-Servers in Laravel verwendet wird.

Zuerst müssen wir Workerman in unserem Laravel-Projekt installieren:

composer require workerman/workerman
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes können wir einen benutzerdefinierten Artisan-Befehl erstellen, um den WebSocket-Server zu starten:

php artisan make:command WebSocketServer
Nach dem Login kopieren

Dann schreiben Sie den Code in app/Console/Commands/WebSocketServer.php Datei:

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;
use WorkermanWorker;

class WebSocketServer extends Command {
    // 命令名称
    protected $name = 'websocket:server';

    // 命令描述
    protected $description = 'Start WebSocket server';

    // 执行命令
    public function handle() {
        // 创建Worker实例,监听8080端口
        $wsWorker = new Worker("websocket://0.0.0.0:8080");

        // 进程数量
        $wsWorker->count = 4;

        // 处理连接事件
        $wsWorker->onConnect = function($connection) {
            echo "New connection
";
        };

        // 处理消息事件
        $wsWorker->onMessage = function($connection, $data) {
            // 处理消息
        };

        // 运行Worker
        Worker::runAll();
    }
}
Nach dem Login kopieren

Abschließend können wir den WebSocket-Server mit dem folgenden Befehl starten:

php artisan websocket:server
Nach dem Login kopieren

Wie Sie sehen, ist die Implementierung eines WebSocket-Servers mithilfe von Workerman sehr einfach und lässt sich problemlos in andere Frameworks integrieren.

  1. Vollständiges Codebeispiel

Das Folgende ist ein vollständiges WebSocket-Serverbeispiel, das vom Client gesendete Nachrichten empfangen, eine einfache Verarbeitung durchführen und die Verarbeitungsergebnisse an den Client antworten kann:

count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $result = "Received: {$data}";
    $connection->send($result);
};

// 处理连接断开事件的回调函数
$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};

// 启动Worker
Worker::runAll();
Nach dem Login kopieren

Das Obige wird mit Workerman Through implementiert Als ich diesen Artikel einleitete, glaube ich, dass die Leser das relevante technische Wissen über den gesamten Inhalt des WebSocket-Servers beherrschen und diese Techniken auch für die Entwicklung in tatsächlichen Projekten verwenden können.

Das obige ist der detaillierte Inhalt vonWorkerman-Entwicklung: So implementieren Sie einen WebSocket-Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!