ホームページ > バックエンド開発 > PHPチュートリアル > PHP で WebSocket を使用するにはどうすればよいですか?

PHP で WebSocket を使用するにはどうすればよいですか?

WBOY
リリース: 2023-05-12 09:28:02
オリジナル
1585 人が閲覧しました

Web アプリケーションがより複雑になるにつれて、リアルタイム通信とデータ プッシュがより一般的になってきています。ここで WebSocket が登場します。 WebSocket は、サーバーとクライアントがリアルタイム通信とデータ プッシュのための双方向通信のための永続的な接続を確立できるようにするプロトコルです。この記事では、PHP で WebSocket を使用する方法について説明します。

  1. WebSocket プロトコルの概要

WebSocket は、接続の確立後にサーバーとクライアントがリアルタイムで通信できるようにする、全二重の TCP ベースのプロトコルです。 HTTP 要求/応答モデルとは異なり、WebSocket 接続は接続が確立された後も常に開いたままになるため、複数の HTTP ハンドシェイクは必要ありません。

WebSocket は、テキスト、バイナリ、JSON、XML などの複数のデータ型をサポートするバイナリ プロトコルです。これにより、WebSocket はリアルタイム通信とデータ プッシュに最適になります。

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

PHP で WebSocket を使用するには、ライブラリを使用する必要があります。この記事では、Ratchet ライブラリを使用します。 Ratchet をインストールするには、Composer から次のコマンドを実行します。

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

インストールが完了したら、WebSocket アプリケーションを実装するコードの作成を開始できます。

  1. WebSocket サービスの実装

次に、クライアントからメッセージを受信し、接続されているすべてのクライアントにメッセージを送信する WebSocket サービスを実装する簡単な例を示します。 ##

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
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}
";
    }

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

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

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

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

echo "Server started
";
$server->run();
ログイン後にコピー

上の例では、MessageComponentInterface インターフェイスを実装する Chat というクラスを定義しました。このクラスには、接続、切断、およびクライアントからのメッセージを処理するための特別なメソッドが含まれています。

onOpen(ConnectionInterface $conn): このメソッドは、クライアントがサーバーに接続するときに呼び出されます。ここでは、クライアント オブジェクトに接続を追加します。

onClose(ConnectionInterface $conn): このメソッドは、クライアントが接続を閉じるときに呼び出されます。ここでは、接続クライアント オブジェクトを削除します。

onMessage(ConnectionInterface $from, $msg): このメソッドは、クライアントがメッセージを送信するときに呼び出されます。ここでは、接続されている他のクライアントにメッセージを送信します。

onError(ConnectionInterface $conn, Exception $e): このメソッドは、エラーが発生したときに呼び出されます。ここで接続を閉じます。

上記の例では、IoServer クラスを介して HTTP サーバーも作成し、ポート 8080 をリッスンし、HttpServer を介して WebSocket サーバーにリクエストを渡し、WsServer を介して Chat クラスにリクエストを渡しました。

    クライアントの実装
WebSocket サーバーに接続するには、クライアントを実装する必要があります。サーバーに接続してメッセージを送信する簡単な例を次に示します。

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket client</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <input type="text" id="message" placeholder="Enter your message">
    <button id="send">Send</button>

    <ul id="messages"></ul>

    <script>
        $(function () {
            var socket = new WebSocket('ws://localhost:8080');

            socket.onopen = function() {
                console.log('Connection opened');
            };

            socket.onclose = function() {
                console.log('Connection closed');
            };

            socket.onmessage = function(event) {
                var data = JSON.parse(event.data);
                $('#messages').append($('<li>').text(data.message));
            };

            $('#send').click(function() {
                var message = $('#message').val();
                socket.send(JSON.stringify({message: message}));
            });
        });
    </script>
</body>
</html>
ログイン後にコピー
上記の例では、WebSocket オブジェクトを使用して新しい WebSocket 接続を作成します。接続がオープンまたはクローズされると、onopen イベントと onclose イベントがトリガーされます。 WebSocket がサーバーからメッセージを受信すると、onmessage イベントがトリガーされます。 jQuery ライブラリを使用して、[送信] ボタンのクリック イベントをリッスンし、クリックされると、テキスト入力ボックスの値をメッセージとしてサーバーに送信しました。

    概要
WebSocket は、サーバーとクライアントが双方向通信のための永続的な接続を確立して、リアルタイムの通信とデータを実現できる強力なプロトコルです。押す。この記事では、Ratchet ライブラリを使用して単純な WebSocket サーバーを実装しました。また、単純な HTML ページを使用して、サーバーに接続してメッセージを送信する方法を示しました。リアルタイムのインタラクティブな Web アプリケーションを構築したい場合、WebSocket は絶対に不可欠な部分です。

以上がPHP で WebSocket を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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