ホームページ  >  記事  >  バックエンド開発  >  PHP で WebSocket を使用してリアルタイム Web アプリケーションを作成する

PHP で WebSocket を使用してリアルタイム Web アプリケーションを作成する

WBOY
WBOYオリジナル
2023-06-19 15:59:181237ブラウズ

Web アプリケーションは現代のインターネットでますます人気があり、そのようなアプリケーションは豊かなユーザー エクスペリエンスと対話を提供できます。ただし、従来の HTTP 要求/応答モデルには、リアルタイムのパフォーマンスと効率において一定の制限があります。この問題を解決するために、WebSocket が登場しました。 WebSocket は、クライアントとサーバー間のリアルタイム通信を可能にする全二重通信プロトコルです。この記事では、PHP と WebSocket を使用してリアルタイム Web アプリケーションを作成する方法について説明します。

  1. WebSocket とは

WebSocket は、同じ TCP 接続上で双方向通信を可能にする TCP ベースの全二重通信プロトコルです。従来の HTTP プロトコルでは、クライアントとサーバー間の一方向の要求/応答通信のみが可能です。 WebSocket プロトコルを使用すると、接続が確立された後、クライアントとサーバーはリクエストを待たずにいつでもデータを送信できます。このリアルタイム性と効率性により、WebSocket プロトコルはリアルタイム Web アプリケーションの開発に適しています。

  1. WebSocket を使用する理由

リアルタイム Web アプリケーションでは、より良いユーザー サービスを提供するために、ユーザーの操作とデータの更新をタイムリーにユーザーにフィードバックする必要があります。経験。従来の HTTP 要求/応答モデルにはある程度の遅延があり、リアルタイム通信のニーズを満たすことができません。さらに、HTTP リクエスト/レスポンス モデルではサーバーに高い負荷がかかり、リクエストごとに新しい接続が必要となるため、通信のオーバーヘッドが増加します。したがって、WebSocket を使用すると、リアルタイム パフォーマンスが向上し、サーバーの負荷が軽減されます。

  1. PHP を使用して WebSocket サーバーを作成する

PHP では、Ratchet ライブラリを利用して WebSocket サーバーを簡単に作成できます。 Ratchet は PHP 用の WebSocket ライブラリで、WebSocket プロトコルの実装を提供し、WebSocket サーバーとクライアントを簡単に作成できるため、リアルタイム Web アプリケーションの開発に便利です。以下は、Ratchet を使用して WebSocket サーバーを作成する手順です。

ステップ 1: Ratchet ライブラリをインストールする

Composer ツールを使用して Ratchet ライブラリをインストールできます。ターミナルで次のコマンドを実行します。

composer require cboden/ratchet

ステップ 2: サーバー クラスを作成する

サーバー クラスでは、onOpen と onMessage の 2 つのメソッドをオーバーライドする必要があります。 onOpen メソッドは接続の確立時に呼び出され、onMessage メソッドはメッセージの受信時に呼び出されます。以下は、単純なサーバー クラスの例です。

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected
";
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "An error has occurred: {$e->getMessage()}
";
        $conn->close();
    }
}

上の例では、MessageComponentInterface インターフェイスを実装する Chat という名前のクラスを定義しました。コンストラクターでは、接続リスト $clients を初期化して、接続されているすべてのクライアントを記録します。 onOpen メソッドでは、新しい接続を接続リストに追加し、接続のリソース ID を記録します。 onMessage メソッドでは、すべての接続をループし、受信したメッセージを送信者を除くすべてのクライアントに送信します。 onClose メソッドと onError メソッドは、接続の終了やエラー状況を処理するために使用されます。

ステップ 3: サーバーを実行する

サーバーを実行する前に、ターミナルで WebSocket サーバーを起動する必要があります。プロジェクト ディレクトリに起動スクリプトを作成して、サーバーを起動できます。起動スクリプトでは、WebSocket サーバー オブジェクトを作成し、サーバー クラスのインスタンスを WebSocket サーバー オブジェクトに渡す必要があります。以下は起動スクリプトの例です:

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();

上の例では、ポート 8080 で待機する WebSocket サーバー オブジェクト $server を作成しました。 HttpServer と WsServer は、HTTP リクエストと WebSocket 接続を処理する Ratchet ライブラリ内の 2 つのコンポーネントです。 WebSocket 接続が確立された後に関連イベントを処理するために、Chat クラスのインスタンスを WsServer に渡します。最後に、$server->run() メソッドを呼び出して WebSocket サーバーを起動します。

  1. WebSocket を使用したリアルタイム Web アプリケーションの開発

PHP を使用して WebSocket サーバーを作成したら、リアルタイム Web アプリケーションの開発を開始できます。 WebSocket サーバーは、接続されているすべてのクライアントを記録し、クライアントからメッセージを受信すると、そのメッセージをすべてのクライアントにブロードキャストできます。 JavaScript を使用して、クライアント側でコードを記述し、WebSocket 接続を確立し、データを送受信できます。

以下は、jQuery を使用して WebSocket 接続を確立するためのサンプル コードです:

let websocket = new WebSocket('ws://localhost:8080');

websocket.onmessage = function(event) {
    console.log(event.data);
}

$('form').submit(function(event) {
    event.preventDefault();
    let message = $('input').val();
    $('input').val('');
    websocket.send(message);
});

上の例では、WebSocket コンストラクターを使用して WebSocket 接続を確立し、接続アドレスは ws です。 ://ローカルホスト:8080。 onmessage 関数では、WebSocket メッセージ イベントをリッスンし、受信後にメッセージをコンソールに出力します。フォーム送信イベントでは、入力ボックス内のテキストを取得し、WebSocket サーバーに送信します。

  1. 結論

WebSocket はリアルタイム通信を実現できるプロトコルであり、高効率、リアルタイム性という特徴を持っています。 PHP では、Ratchet ライブラリを利用して WebSocket サーバーを簡単に作成できるため、リアルタイム Web アプリケーションの開発がよりシンプルかつ効率的になります。将来的には、WebSocket プロトコルはリアルタイム Web アプリケーション開発の重要な部分になるでしょう。

以上がPHP で WebSocket を使用してリアルタイム Web アプリケーションを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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