ホームページ  >  記事  >  バックエンド開発  >  PHP の WebSocket テクニカル ガイド

PHP の WebSocket テクニカル ガイド

WBOY
WBOYオリジナル
2023-05-22 10:40:353377ブラウズ

Web アプリケーションの人気が高まるにつれ、Websocket は重要なテクノロジになりました。 Websocket テクノロジは全二重のリアルタイム通信方式を提供し、従来の HTTP リクエスト/レスポンス モデル内で進化し続けています。 PHP は、Web 開発やアプリケーションで広く使用されている人気のスクリプト言語です。この記事では、PHP の WebSocket テクノロジの基本概念、実装方法、関連ライブラリについて説明します。

1. Websocket テクノロジーとは何ですか?

WebSocket テクノロジは、TCP プロトコルに基づくリアルタイム通信プロトコルであり、Web ブラウザとサーバーの間に双方向の通信接続を確立して、リアルタイムのメッセージ プッシュとデータ送信を実現します。これは、クライアントがサーバーへのリクエストを開始してからサーバーの応答を待つ必要がある HTTP リクエスト/レスポンス モデルとは異なります。これは通常、ポーリングが必要で非効率です。 WebSocket テクノロジを使用すると、サーバーはクライアントの要求を待たずに、クライアントにデータをアクティブに送信できます。

2. WebSocket の基本概念

WebSocket は、HTTP プロトコルと同じ TCP ポート (デフォルトのポートは 80、443) を使用し、HTTP アップグレード プロトコルを介してハンドシェイクを実装します。ハンドシェイクが成功すると、通信当事者は WebSocket 接続を確立し、データ送信を実行します。

WebSocket の基本概念は次のとおりです。

  1. WebSocket 接続

WebSocket 接続は、TCP プロトコルに基づく双方向通信接続です。 Websocket では、データ送信のサイクルは HTTP のようにクライアントによって決定されるのではなく、サーバーまたはクライアントによってアクティブに送信されるメッセージによってトリガーされます。

  1. WebSocket プロトコル

WebSocket プロトコルは、クライアントとサーバー間のデータ交換と通信を、低いオーバーヘッドと高いリアルタイム パフォーマンスで可能にするイベント駆動型のプロトコルです。

  1. WebSocket メッセージ

WebSocket メッセージは HTTP リクエストに似ていますが、WebSocket ではメッセージは非同期に送信されます。 HTTP リクエストと比較して、WebSocket メッセージには、帯域幅の消費が少なく、遅延が少なく、応答時間が速いという利点があります。

3. WebSocket の実装方法

以下では、PHP に WebSocket 技術を実装する方法を紹介します。

  1. 拡張ライブラリに基づく

WebSocket の実装に使用できる複数の PHP 拡張ライブラリがあります。例:

PHP-Socket.io: このライブラリ実装 リアルタイム通信の実装に使用できる WebSocket サーバー。

Ratchet: Ratchet は、PHP、React、および ReactPHP に基づいた WebSocket サーバーの実装です。

Swoole: Swoole は、完全な WebSocket サーバー実装を提供する非同期の高性能 PHP ネットワーク サーバーです。

これらのライブラリは PHP 拡張ライブラリを通じて実装されており、使用する前にサーバーにインストールして構成する必要があります。

  1. 手動実装

WebSocket の手動実装には、WebSocket プロトコルの実装も必要です。 WebSocket プロトコルは HTTP プロトコルに基づいており、いくつかの追加の HTTP 要求ヘッダー フィールドを定義します。

次は、WebSocket プロトコルのハンドシェイク プロセスです:

  1. クライアントは、Upgrade: websocket ヘッダーをサーバーに送信します。2. サーバーは、Upgrade: websocket ヘッダー、Connection を返します。 : アップグレード ヘッダーと SecWebSocketKey ヘッダー。後者はクライアントのリクエストに基づいて生成されます。 3. クライアントは、生成された SecWebSocketKey を使用して、サーバーによって送信された SecWebSocketAccept を計算し、ハンドシェイクの成功を確認します。
  2. ハンドシェイクが成功すると、サーバーとクライアントの間でデータを直接送信できます。

コード サンプル:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '127.0.0.1', 8080);
socket_listen($socket);

$clients = [];

while (true) {
    if (($client = socket_accept($socket))) {
        array_push($clients, $client);
    }

    foreach ($clients as $key => $client) {
        $read = socket_read($client, 1024);

        if ($read != null) {
            foreach ($clients as $send_agent) {
                socket_write($send_agent, "client $key : $read");
            }
        }
        else {
            unset($clients[$key]);
        }
    }
}

これは、ポート 8080 をリッスンし、クライアントからの接続を受け入れ、情報を送受信する単純な WebSocket サーバー実装です。

4. WebSocket アプリケーション シナリオ

次に、一般的な WebSocket アプリケーション シナリオをいくつか示します:

  1. インスタント メッセージング: WebSocket を使用して、インスタント メッセージングを実装し、実際のメッセージングをサポートできます。時間メッセージの送信と受信。
  2. ゲーム クライアントの実装: WebSocket を使用してオンライン ゲーム クライアントを実装し、ゲーム プレーヤーにリアルタイムのインタラクティブな通信機能を提供できます。
  3. 株式市場のリアルタイム更新: WebSocket を使用して株式市場をリアルタイムに更新できるため、ユーザーは最新の株価やデータを簡単に入手できます。
  4. モノのインターネット通信: WebSocket は IoT デバイス間の通信に使用できます。

5. 結論

WebSocket は非常に便利なテクノロジーです。 PHP では、さまざまな方法で WebSocket を実装できます。拡張ライブラリを使用するか、WebSocket プロトコルを手動で実装するかに関係なく、WebSocket を使用すると、Web アプリケーションの効率とリアルタイム パフォーマンスを向上させることができ、開発者が詳細に研究して使用する価値のあるテクノロジです。

以上がPHP の WebSocket テクニカル ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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