ホームページ  >  記事  >  バックエンド開発  >  PHP と WebSocket を組み合わせてリアルタイム通信を実現するにはどうすればよいですか?

PHP と WebSocket を組み合わせてリアルタイム通信を実現するにはどうすればよいですか?

王林
王林オリジナル
2023-08-19 09:43:441011ブラウズ

PHP と WebSocket を組み合わせてリアルタイム通信を実現するにはどうすればよいですか?

PHP と WebSocket を組み合わせてリアルタイム通信を実現するにはどうすればよいでしょうか?

インターネットの急速な発展に伴い、多くのアプリケーションにおいてリアルタイム通信の重要性がますます高まっています。 WebSocket は、TCP に基づいて永続的な接続を確立し、サーバーとクライアント間の双方向通信を可能にするリアルタイム通信用のプロトコルです。

この記事では、PHP と WebSocket を組み合わせて使用​​してリアルタイム通信を実現する方法について説明します。まず、PHP がインストールされており、WebSocket が有効なサーバーがあることを確認する必要があります。

ステップ 1: サーバー側の設定

WebSocket 通信を実装するには、サーバー側で WebSocket 通信を有効にする必要があります。これは、PHP のラチェット ライブラリを使用して実現できます。まず、Composer を通じてラチェット ライブラリをインストールします。

composer require cboden/ratchet

インストールが完了したら、WebSocket サーバー ファイル websocket.php を作成し、それに次のコードを追加します。

require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

class WebSocketServer 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 onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection closed: {$conn->resourceId}
";
    }

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

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

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

$server->run();

上記では、コードでは、Ratchet の MessageComponentInterface インターフェイスを実装する WebSocketServer という名前のクラスを作成しました。このクラスでは、WebSocket 接続の開始、終了、エラー、メッセージ送信を処理するための onOpen、onClose、onError、onMessage およびその他のメソッドを定義します。

IoServer::factory() メソッドを通じて WebSocket サーバー インスタンスを作成し、HttpServer、WsServer、および WebSocketServer クラスの使用を指定します。最後に、サーバーをポート 8080 で実行します。

ステップ 2: クライアントのセットアップ

クライアント側では、JavaScript を使用して PHP の WebSocket サーバーと通信できます。以下はクライアント ファイルのサンプルです。index.html:

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

    <script>
        var conn = new WebSocket('ws://localhost:8080');

        conn.onopen = function() {
            console.log('Connected to the server');
        };

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

        conn.onerror = function(error) {
            console.log('Error occurred: ' + error);
        };

        conn.onmessage = function(msg) {
            $('#messageList').append('<li>' + msg.data + '</li>');
        };

        $('#sendButton').click(function() {
            var message = $('#messageInput').val();
            conn.send(message);
        });
    </script>
</body>
</html>

上記のコードでは、JavaScript の WebSocket オブジェクトを使用してサーバーとの接続を作成します。対応するコールバック関数は、接続のオープン時、クローズ時、エラー発生時、およびメッセージの受信時に実行されます。

ページに、メッセージを入力して送信するためのテキスト ボックスとボタンを追加しました。メッセージを受信すると、そのメッセージは順序なしリストに追加されます。

ステップ 3: コードを実行します。

コマンド ラインでサーバー ファイルが存在するディレクトリを入力し、次のコマンドを実行してサーバーを起動します。

php websocket.php

次に、ブラウザの .html ファイルのインデックスを開くと、リアルタイム通信を開始できます。入力ボックスにメッセージを入力し、「送信」ボタンをクリックすると、メッセージは WebSocket 経由でサーバーに送信され、サーバーによって接続されているすべてのクライアントに転送されます。

概要

PHP と WebSocket を組み合わせて使用​​することで、シンプルかつ強力なリアルタイム通信機能を実現できます。この記事のサンプル コードは、基本的なリアルタイム通信用にサーバーとクライアントをセットアップする方法を示しています。実際のニーズに基づいて、これらのコードをさらに拡張および改善し、より複雑な機能を実装できます。

以上がPHP と WebSocket を組み合わせてリアルタイム通信を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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