ホームページ >バックエンド開発 >PHPチュートリアル >PHP マルチスレッドを使用して高性能 Websocket サーバーを実装する方法

PHP マルチスレッドを使用して高性能 Websocket サーバーを実装する方法

WBOY
WBOYオリジナル
2023-06-30 14:58:421920ブラウズ

PHP マルチスレッドを使用して高性能 Websocket サーバーを実装する方法

前書き:
インターネットの継続的な発展に伴い、リアルタイムのデータ送信と対話は多くの人にとって不可欠な機能になりました。 Web アプリケーション。従来の Web 開発では、クライアントとサーバー間の通信に HTTP プロトコルがよく使用されます。ただし、HTTP プロトコルはステートレスかつ要求/応答メカニズムの特性を備えているため、リアルタイムのデータ送信のニーズを満たすことができません。 Websocket は、クライアントとサーバーの間でリアルタイムに双方向通信を行うことができる全二重通信プロトコルです。この記事では、PHP マルチスレッドを使用して、リアルタイム データ送信のニーズを満たす高性能 Websocket サーバーを実装する方法を紹介します。

1. Websocket プロトコルの原理
Websocket プロトコルは、単一の TCP 接続で全二重通信を行うためのプロトコルです。その核心は、HTTP プロトコルに基づいた特別なプロトコル ヘッダーを追加して、双方向通信を実現することです。 Websocket プロトコルのハンドシェイク プロセスは次のとおりです。

  1. クライアントはリクエストを送信します。クライアントは、値「websocket」を持つ特別な Upgrade ヘッダーを含む HTTP リクエストをサーバーに送信します。
  2. サーバー応答: サーバーがリクエストを受信した後、Websocket プロトコルをサポートしている場合は、特別な応答ヘッダーとステータス コード 101 を含む HTTP 応答を返します。同時に、サーバーとクライアントは TCP 接続を確立します。サーバーが Websocket プロトコルをサポートしていない場合は、プレーンな HTTP 応答が返されます。
  3. Websocket 接続の確立: クライアントがサーバーの応答を受信した後、ステータス コードが 101 の場合は Websocket 接続が正常に確立されたことを意味し、それ以外の場合は確立が失敗したことを意味します。
  4. データ送信: Websocket 接続が確立された後、クライアントとサーバーは相互にメッセージを送信して、リアルタイムの双方向通信を実現できます。

2. PHP マルチスレッド Websocket サーバーの選択
PHP はスクリプト言語をベースとしたサーバーサイド開発言語であり、シンプルで使いやすいことが最大の特徴です。ただし、PHP 自体はシングルスレッドであるため、多数の同時リクエストを処理するときにパフォーマンスのボトルネックが発生する可能性があります。したがって、高パフォーマンスの Websocket サーバーを実装するには、PHP のマルチスレッド拡張機能を使用する必要があります。

現在、pthreads、Swoole など、PHP 用のマルチスレッド拡張機能が多数あります。これらの拡張機能はすべてマルチスレッド プログラミングを実装できますが、Websocket サーバーのニーズに応じて、Swoole 拡張機能を使用することをお勧めします。 Swoole は PHP 用の高性能ネットワーク通信エンジンで、従来の PHP-FPM Apache または Nginx アーキテクチャを置き換え、より高い同時処理能力を提供します。

3. Swoole を使用してマルチスレッド Websocket サーバーを実装する

  1. Swoole 拡張機能のインストール: pecl コマンドを使用して Swoole 拡張機能をインストールするか、ソース コードをダウンロードしてコンパイルおよび実行できます。インストール。インストールが完了したら、php.ini で swoole.so ファイルを有効にするように設定する必要があります。
  2. Websocket サーバー コードの作成: Swoole が提供する Server クラスを使用して、Websocket サーバーを作成します。サンプル コードは次のとおりです:

    <?php
    $server = new SwooleWebSocketServer("0.0.0.0", 9502);
    
    $server->on('open', function ($server, $request) {
     echo "client {$request->fd} connected
    ";
    });
    
    $server->on('message', function ($server, $frame) {
     echo "received message: {$frame->data}
    ";
     $server->push($frame->fd, "this is server");
    });
    
    $server->on('close', function ($server, $fd) {
     echo "client {$fd} closed
    ";
    });
    
    $server->start();
    ?>

    上記のコードでは、Swoole の WebSocketServer クラスは次のとおりです。 Websocket サーバーと、オープン、メッセージ、クローズ イベント用のバインドされたコールバック関数を作成するために使用されます。クライアントがサーバーに接続するか、メッセージを送信するか、接続を閉じると、対応するコールバック関数が実行されます。

  3. Websocket サーバーの起動: 上記のコードを実行して Websocket サーバーを起動し、ローカル 9502 ポートでリッスンし、複数のクライアント接続とメッセージを同時に処理できるようにします。

4. 概要
この記事では、PHP マルチスレッドを使用して高性能 Websocket サーバーを実装する方法を紹介します。 Swoole 拡張機能を使用すると、PHP 言語のシンプルさと使いやすさを利用して、高い同時実行機能を備えた Websocket サーバーを実装できます。インスタント チャット、リアルタイム プッシュ、リアルタイム データ送信などの機能を実装する場合でも、PHP マルチスレッドを使用して簡単に実装できます。この記事が Websocket サーバー開発の皆様のお役に立てれば幸いです。

以上がPHP マルチスレッドを使用して高性能 Websocket サーバーを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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