Heim  >  Artikel  >  PHP-Framework  >  So erstellen Sie mit Swoole einen leistungsstarken WebSocket-Server

So erstellen Sie mit Swoole einen leistungsstarken WebSocket-Server

WBOY
WBOYOriginal
2023-06-13 23:59:201421Durchsuche

In den letzten Jahren erfreut sich die WebSocket-Technologie in der Internetentwicklung immer größerer Beliebtheit, insbesondere in Bereichen wie Echtzeitkommunikation, Online-Spielen und Push-Nachrichten. Als leistungsstarke, asynchrone PHP-Erweiterung kann Swoole Entwicklern dabei helfen, auf einfache Weise leistungsstarke WebSocket-Server zu erstellen. In diesem Artikel wird erläutert, wie Sie mit Swoole einen leistungsstarken WebSocket-Server erstellen.

1. Swoole installieren

Swoole unterstützt die PHP-Versionen 5.3–7.4 und kann über PECL oder Quellcode installiert werden. Nehmen Sie als Beispiel die Installation des Quellcodes:

Laden Sie zuerst das Swoole-Installationspaket herunter, entpacken Sie es dann in das Verzeichnis und führen Sie den folgenden Befehl aus:

phpize
./configure
make
make install

Fügen Sie nach Abschluss der Installation die folgenden Konfigurationselemente zur Aktivierung in php.ini hinzu die Swoole-Erweiterung:

extension=swoole

Installation abgeschlossen. Verwenden Sie abschließend den Befehl php --ri swoole, um die grundlegenden Informationen von Swoole abzufragen. php --ri swoole 命令可以查询 Swoole 的基本信息。

二、创建 WebSocket 服务器

下面我们来搭建一个简单的 WebSocket 服务器。首先在项目根目录下创建一个 server.php 文件,输入以下代码:

<?php
$server = new swoole_websocket_server("0.0.0.0", 9502);

$server->on("open", function (swoole_websocket_server $server, swoole_http_request $request) {
    echo "client {$request->fd} connected
";
});

$server->on("message", function (swoole_websocket_server $server, $frame) {
    echo "received message: {$frame->data}
";
});

$server->on("close", function (swoole_websocket_server $server, $fd) {
    echo "client {$fd} closed
";
});

$server->start();

以上代码中,我们首先创建了一个 swoole_websocket_server 实例,设置监听地址为 0.0.0.0,端口为 9502。然后分别监听了 open、message、close 三个事件,在客户端连接建立、接收到消息、连接关闭时分别触发相应的事件处理函数。

接下来在控制台运行以下命令启动 WebSocket 服务器:

php server.php

如果一切正常,可以看到类似以下输出:

2019-06-17 10:51:17|INFO|Server Start: 0.0.0.0:9502

三、测试 WebSocket 服务器

启动 WebSocket 服务器后,可以使用前端开发者常用的 WebSocket 插件工具,例如 Firefox 的 Simple WebSocket Client 插件 或 Chrome 的 WebSocket Client 插件 测试服务器是否正常工作。

以 Firefox Simple WebSocket Client 为例,打开插件后输入 ws://127.0.0.1:9502 点击 Connect 按钮即可。这时候我们会发现,在服务器端控制台输出了输出了 "client 1 connected" 日志,这说明 WebSocket 客户端已经成功连接了服务器。

我们可以在插件的发送区域输入测试内容,比如输入 "hello" 然后点击 send 按钮,就可以在控制台看到对应的 "received message: hello" 日志,说明服务器已经成功接收了 WebSocket 客户端发送的消息。

四、提高性能

在大流量场景下,WebSocket 服务器的性能是非常关键的。Swoole 提供了多种机制来提高 WebSocket 服务器的性能。

  1. 开启协程

通过在代码中调用 SwooleCoroutineun

2. Erstellen Sie einen WebSocket-Server

Lassen Sie uns einen einfachen WebSocket-Server erstellen. Erstellen Sie zunächst eine server.php-Datei im Stammverzeichnis des Projekts und geben Sie den folgenden Code ein:
    <?php
    use SwooleCoroutine;
    Coun(function () {
        $server = new swoole_websocket_server("0.0.0.0", 9502);
    
        $server->on("open", function (swoole_websocket_server $server, swoole_http_request $request) {
            echo "client {$request->fd} connected
    ";
        });
    
        $server->on("message", function (swoole_websocket_server $server, $frame) {
            echo "received message: {$frame->data}
    ";
        });
    
        $server->on("close", function (swoole_websocket_server $server, $fd) {
            echo "client {$fd} closed
    ";
        });
    
        $server->start();
    });
  1. Im obigen Code haben wir zunächst eine swoole_websocket_server-Instanz erstellt und die Abhöradresse auf 0.0.0.0 und den Port auf 9502 festgelegt. Anschließend werden die drei Ereignisse „Öffnen“, „Nachricht“ und „Schließen“ überwacht und die entsprechenden Ereignisverarbeitungsfunktionen werden ausgelöst, wenn die Clientverbindung hergestellt, eine Nachricht empfangen und die Verbindung geschlossen wird.
Führen Sie als Nächstes den folgenden Befehl in der Konsole aus, um den WebSocket-Server zu starten:

$server->set([
    'worker_num' => 4,   // 工作进程数量
]);

Wenn alles normal ist, sehen Sie eine Ausgabe ähnlich der folgenden:

$db = new SwooleCoroutineMySQL();
$db->connect([
    'host' => 'localhost',
    'port' => 3306,
    'user' => 'root',
    'password' => '',
    'database' => 'test',
]);

$res = $db->query('SELECT * FROM users WHERE id = 1');

3. Testen Sie den WebSocket-Server
  1. Nachdem Sie den WebSocket-Server gestartet haben Sie können die von Front-End-Entwicklern gängigen WebSocket-Plug-In-Tools verwenden, z. B. das Simple WebSocket Client-Plug-In für Firefox oder das WebSocket Client-Plug-In für Chrome, um zu testen, ob der Server ordnungsgemäß funktioniert.
Nehmen Sie den Firefox Simple WebSocket Client als Beispiel. Geben Sie nach dem Öffnen des Plug-ins ws://127.0.0.1:9502 ein und klicken Sie auf die Schaltfläche „Verbinden“. Zu diesem Zeitpunkt werden wir feststellen, dass das Protokoll „Client 1 verbunden“ auf der Serverkonsole ausgegeben wird, was darauf hinweist, dass der WebSocket-Client erfolgreich eine Verbindung zum Server hergestellt hat.

Wir können den Testinhalt in den Sendebereich des Plug-Ins eingeben. Geben Sie beispielsweise „Hallo“ ein und klicken Sie auf die Schaltfläche „Senden“. Sie können das entsprechende Protokoll „Empfangene Nachricht: Hallo“ in der Konsole sehen dass der Server die vom WebSocket-Client gesendete Nachricht erfolgreich empfangen hat.

4. Verbessern Sie die Leistung

In Szenarien mit großem Datenverkehr ist die Leistung des WebSocket-Servers sehr wichtig. Swoole bietet mehrere Mechanismen zur Verbesserung der Leistung von WebSocket-Servern. 🎜
    🎜Starten Sie die Coroutine🎜🎜🎜Durch Aufrufen der Funktion SwooleCoroutineun im Code zum Starten der Coroutine können mehrere Coroutinen gleichzeitig ausgeführt werden und der Durchsatz des Servers verbessert werden. 🎜🎜Ändern Sie beispielsweise den Code in server.php: 🎜rrreee🎜🎜Legen Sie die Anzahl der Arbeiter fest🎜🎜🎜Beim Starten des Servers können Sie die gleichzeitige Verarbeitungsfähigkeit des Servers verbessern, indem Sie die Anzahl der Arbeiter festlegen. Die Anzahl der Arbeiter kann auf folgende Weise festgelegt werden: 🎜rrreee🎜Unter der Coroutine muss die Anzahl der Arbeiter innerhalb der Ausführungsfunktion festgelegt werden. 🎜🎜🎜Verwenden Sie asynchrones MySQL🎜🎜🎜Wenn der WebSocket-Server die Datenbank betreiben muss, können Sie den asynchronen MySQL-Client von Swoole verwenden, um Blockierungen durch Datenbankvorgänge zu vermeiden und so die Serverleistung zu verbessern. 🎜🎜Der Beispielcode für die Verwendung des asynchronen MySQL-Clients Swoole zum Abrufen eines Datensatzes lautet beispielsweise wie folgt: 🎜rrreee🎜Das Obige ist der grundlegende Prozess für die Verwendung von Swoole zum Erstellen eines leistungsstarken WebSocket-Servers. Durch die Nutzung der asynchronen Unterstützung, der Multiprozesse, der Coroutine und anderer Vorteile von Swoole kann die Leistung des WebSocket-Servers erheblich verbessert werden, wodurch die Anwendung stabiler und effizienter wird. 🎜

Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit Swoole einen leistungsstarken WebSocket-Server. 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