Heim > Artikel > PHP-Framework > So erstellen Sie mit Swoole einen leistungsstarken WebSocket-Server
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 服务器的性能。
通过在代码中调用 SwooleCoroutineun
<?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(); });
$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
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!