近年、WebSocket テクノロジはインターネット開発、特にリアルタイム通信、オンライン ゲーム、プッシュ メッセージなどの分野でますます普及しています。高性能の非同期 PHP 拡張機能である Swoole は、開発者が高性能の WebSocket サーバーを簡単に構築できるように支援します。この記事では、Swooleを使って高性能なWebSocketサーバーを構築する方法を紹介します。
1. Swoole のインストール
Swoole は PHP 5.3 ~ 7.4 バージョンをサポートしており、pecl またはソース コードを通じてインストールできます。以下はソース コードのインストールを例にしています。
最初に Swoole インストール パッケージをダウンロードし、それをディレクトリに解凍して次のコマンドを実行します。
phpize ./configure make make install
インストールが完了したら、 Swoole 拡張機能を有効にするには、php.ini に次の設定項目を追加します。
extension=swoole
インストールが完了したら、php --ri swoole
コマンドを使用して、Swoole の基本情報を照会します。
2. 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 の 3 つのイベントがそれぞれ監視され、クライアント接続の確立、メッセージの受信、接続の終了時に、対応するイベント処理関数がトリガーされます。
次に、コンソールで次のコマンドを実行して WebSocket サーバーを起動します:
php server.php
すべてが正常であれば、次のような出力が表示されます:
2019-06-17 10:51:17|INFO|Server Start: 0.0.0.0:9502
3 WebSocket サーバーをテストする
WebSocket サーバーを起動した後、Firefox の Simple WebSocket クライアント プラグインや Chrome の WebSocket クライアント プラグインなど、フロントエンド開発者が一般的に使用する WebSocket プラグイン ツールを使用して、サーバーが適切に動作しているかどうかをテストします。
Firefox Simple WebSocket クライアントを例として、プラグインを開いた後、「ws://127.0.0.1:9502」と入力し、「接続」ボタンをクリックします。このとき、サーバー コンソールに「client 1 Connected」というログが出力され、WebSocket クライアントがサーバーに正常に接続されたことがわかります。
プラグインの送信領域にテスト内容を入力できます。たとえば、「hello」と入力して送信ボタンをクリックすると、対応する「受信メッセージ: hello」のログが表示されます。サーバーが正常に受信したことを示すコンソール WebSocket クライアントによって送信されたメッセージ。
4. パフォーマンスの向上
大規模なトラフィックのシナリオでは、WebSocket サーバーのパフォーマンスが非常に重要です。 Swoole は、WebSocket サーバーのパフォーマンスを向上させるための複数のメカニズムを提供します。
コード内で SwooleCoroutineun
関数を呼び出してコルーチンを開くと、複数のコルーチンを同時に実行でき、サーバーのパフォーマンスが向上します。パフォーマンス、スループット。
たとえば、server.php のコードを変更します。
<?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, // 工作进程数量 ]);
コルーチンでは、run 関数内でワーカーの数を設定する必要があります。
WebSocket サーバーがデータベースを操作する必要がある場合は、Swoole の非同期 MySQL クライアントを使用してデータベース操作によるブロックを回避し、サーバーのパフォーマンスを向上させることができます。 。
たとえば、Swoole 非同期 MySQL クライアントを使用してレコードを取得するサンプル コードは次のとおりです。
$db = new SwooleCoroutineMySQL(); $db->connect([ 'host' => 'localhost', 'port' => 3306, 'user' => 'root', 'password' => '', 'database' => 'test', ]); $res = $db->query('SELECT * FROM users WHERE id = 1');
上記は、Swoole を使用して高パフォーマンスのサーバーを構築する方法の基本的なプロセスです。 WebSocketサーバー。 Swoole が提供する非同期サポート、マルチプロセス、コルーチン、およびその他の利点を使用することで、WebSocket サーバーのパフォーマンスが大幅に向上し、アプリケーションの安定性と効率性が向上します。
以上がSwoole を使用して高性能 WebSocket サーバーを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。