ホームページ > バックエンド開発 > PHPチュートリアル > PHP で WebSocket API を使用してリアルタイム通信を行う方法

PHP で WebSocket API を使用してリアルタイム通信を行う方法

PHPz
リリース: 2023-06-17 14:46:01
オリジナル
2072 人が閲覧しました

WebSockets API は、Web ページ上でリアルタイムに対話するための新しいプロトコルであり、その最大の利点は双方向通信を実現し、サーバーとクライアント間のリアルタイム通信を可能にすることです。 PHP では、Ratchet ライブラリを使用して WebSocket の機能を実装できます。この記事では、PHP で WebSockets API を使用してリアルタイム通信を実現する方法を詳しく紹介します。

1. Ratchet ライブラリのインストール

WebSocket 機能の実装を開始する前に、Ratchet ライブラリをインストールする必要があります。 Ratchet ライブラリは、WebSocket 機能を迅速に実装するのに役立つ PHP 実装の WebSocket サーバーです。 Composer を使用して Ratchet ライブラリをインストールするのは非常に便利です。プロジェクト ディレクトリで次のコマンドを実行するだけです:

composer require cboden/ratchet
ログイン後にコピー

2. WebSocket サーバーを作成します

Ratchet ライブラリをインストールした後、 WebSocket サーバーを作成できます。 PHP では、RatchetServerIoServer を継承するクラスを作成して WebSocket サーバーを実装します。まず Ratchet ライブラリを導入し、次に WebSocketServer という名前のクラスを作成し、WebSocket サーバー インスタンスを生成する必要があります。

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

class WebSocketServer {
    public function __construct() {
        $server = IoServer::factory(
            new HttpServer(
                new WsServer(
                    new Chat()
                )
            ),
            8080
        );
        $server->run();
    }
}
ログイン後にコピー

上記のコードでは、WebSocket サーバー インスタンスを作成し、ポート 8080 で実行します。 WebSocket サーバーを実行する前に、サーバーのビジネス ロジックを実装するために Chat という名前のクラスを作成する必要があります。 Chat クラスは、クライアントの接続、切断、メッセージの受信などの操作を処理するために使用されます。

3. クライアントの接続と切断の処理

次に、クライアントの接続、切断、メッセージ受信などの操作を Chat クラスに実装する必要があります。クライアントが接続したら、ログを記録し、ウェルカム メッセージを送信する必要があります。クライアントが切断したら、記録から削除する必要があります。以下は、クライアントの接続と切断を処理するコードです。

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 client connected: {$conn->resourceId}
";
        $conn->send("Welcome!
");
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Client disconnected: {$conn->resourceId}
";
    }
}
ログイン後にコピー

上記のコードでは、Chat クラスのコンストラクターで、すべてのクライアント接続を保存するために client という名前の SplObjectStorage オブジェクトを作成します。 onOpen メソッドでは、クライアントが接続すると、それをクライアントに保存し、クライアントにウェルカム メッセージを送信します。 onClose メソッドでは、クライアントが切断されると、そのクライアントをクライアントから削除します。

4. メッセージの送信とブロードキャストの処理

クライアントの接続と切断の論理処理が完了したら、メッセージの受信、メッセージの送信、メッセージのブロードキャストのロジックを実装する必要があります。 Chat クラスでは、受信したメッセージを処理し、送信者や他のクライアントに異なるメッセージを送信するために onMessage メソッドを実装する必要があります。

public function onMessage(ConnectionInterface $from, $msg) {
    $data = json_decode($msg);
    $numRecv = count($this->clients) - 1;
    if ($data->type === 'message') {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                // The sender is not the receiver, send to each client connected
                $client->send(json_encode([
                    'type' => 'message',
                    'user' => $data->user,
                    'message' => $data->message
                ]));
            } else {
                $from->send(json_encode([
                    'type' => 'message',
                    'user' => 'You',
                    'message' => $data->message
                ]));
            }
        }
    }
}
ログイン後にコピー

上記のコードでは、まず受信したメッセージを解析し、メッセージの種類に応じて異なる処理を実行します。メッセージタイプがメッセージの場合、すべてのクライアントにメッセージをブロードキャストする必要があります。送信者が受信者ではない場合、受信者と送信者に別々のメッセージが送信されます。

最後に、WebSocketServer クラスで Chat クラスをインスタンス化し、WebSocket サーバーを起動する必要があります。

new WebSocketServer();
ログイン後にコピー

上記の手順を通じて、Ratchet ライブラリを使用してリアルタイム通信を実装することができました。クライアントは WebSockets サーバーに接続し、JavaScript を通じてメッセージを送受信でき、クライアント上の JavaScript は WebSockets API を使用して実装できます。ここでは詳しく説明しません。

以上がPHP で WebSocket API を使用してリアルタイム通信を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート