ネットワーク技術の発展に伴い、ブラウザとサーバーの間にリアルタイム通信チャネルを確立して接続を維持できる WebSocket (Web ソケット) が一般的なプロトコルになりました。このプロトコルは、Web アプリケーションでリアルタイム通信機能を実現する上で大きな役割を果たします。
PHP 開発の分野では、WebSocket がますます広く使用されています。この記事では、PHPでWebSocketを使う方法を紹介します。
まず、PHP で WebSocket 関数を簡単に実装するには、PHP WebSocket ライブラリを使用する必要があります。現在、最も人気のある PHP WebSocket ライブラリは、Ratchet と PHP WebSocket です。
ここでは、ReactPHP ライブラリを使用して非同期イベント駆動型 PHP を実装する Ratchet を使用します。これは、他のフレームワークと完全に互換性があり、柔軟性と拡張性を備えています。
Ratchet は Composer を使用してインストールおよび管理されるため、始める前に、まず Composer をインストールする必要があります。
Composer はここからダウンロードできます: https://getcomposer.org/
Composer を使用して Ratchet をインストールします:
composer require cboden/ratchet
この例では、単純なチャット ルームを実装し、Ratchet を使用して WebSocket サーバーを作成します。実装手順は次のとおりです:
a. 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();
ここでは、最初に Ratchet ライブラリが導入され、次に WebSocket サーバーが作成されます。 HTTP および WebSocket プロトコルのサポートをそれぞれ指定し、それらを Chat クラスに渡します (Chat クラスがクライアント接続要求の処理に使用されることは後で説明します)。
ここではポート 8080 をリッスンします。
b. チャット ルームを作成する
use RatchetMessageComponentInterface; use RatchetConnectionInterface; class Chat implements MessageComponentInterface { public $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); } 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); } public function onError(ConnectionInterface $conn, Exception $e) { $conn->close(); } }
ここでは、MessageComponentInterface インターフェイスを実装する Chat という名前のクラスを作成しました。このインターフェイスは、さまざまな接続状態で WebSocket サーバーによって実行される操作を定義します。
具体的には、コンストラクターでクライアント変数を宣言しました。これは、接続されたクライアントを格納する SplObjectStorage オブジェクトです。 onOpen メソッドでは、接続オブジェクトがこの変数に割り当てられます。
クライアントからメッセージがある場合、onMessage メソッドを通じてメッセージをブロードキャストし、接続ごとに受信します。
onClose メソッドでは、接続オブジェクトが変数から削除されます。エラーが発生し、クライアント接続を処理できない場合は、onError 関数が呼び出されます。
次に、WebSocket サーバーに接続するためのクライアント側の JavaScript コードが必要です。
let socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('WebSocket连接已建立'); }; socket.onmessage = function(event) { console.log('收到消息:' + event.data); };
ここでは、WebSocket オブジェクトの API を直接使用して、サーバーに接続し、メッセージを送受信します。
上記の手順を完了すると、WebSocket サーバーが正常に作成されました。次に、コマンド ラインからサーバーを実行します。
php server.php
コマンド ラインからサーバーを起動すると、次のような結果が表示されるはずです。
2019-03-22 11:46:55 WebSocketServer: Listening on 0.0.0.0:8080 2019-03-22 11:52:50 WebSocketServer: Opened connection to http://localhost:54616
は、WebSocket サービスが開始されたことを示します。成功し、ポート 8080 でリッスンします。
最後に、ブラウザを開いて http://localhost/chat.html にアクセスすると、ブラウザが WebSocket に接続して参加していることがわかります。サーバ。
let socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('WebSocket连接已建立'); socket.send('欢迎加入聊天室'); }; socket.onmessage = function(event) { console.log('收到消息:' + event.data); };
ここでは、メッセージをサーバーに送信し、サーバー メッセージの受信時にコンソールに記録します。
テスト Web ページを実行すると、コンソールに次のような出力が表示されます。
WebSocket已连接 WebSocket收到消息:欢迎加入聊天室
これで、PHP で WebSocket が正常に使用され、簡単なチャット ルームが作成されました。このチュートリアルがお役に立てば幸いです。
以上がPHPでWebSocketを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。