ホームページ  >  記事  >  PHPフレームワーク  >  Swoole を使用して高性能 WebSocket サーバーを構築する方法

Swoole を使用して高性能 WebSocket サーバーを構築する方法

WBOY
WBOYオリジナル
2023-06-13 23:59:201427ブラウズ

近年、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 サーバーのパフォーマンスを向上させるための複数のメカニズムを提供します。

  1. コルーチンを開く

コード内で 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();
});
  1. ワーカー数を設定します

サーバーの起動時に、ワーカー数を設定できます。ワーカーの数: サーバーの同時処理能力を向上させます。ワーカーの数は次の方法で設定できます。

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

コルーチンでは、run 関数内でワーカーの数を設定する必要があります。

  1. 非同期 MySQL を使用する

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。