PHP は、動的な Web サイトや Web アプリケーションを構築するために一般的に使用されるオープンソースのサーバー側スクリプト言語です。 PHP API インターフェイスは通常、HTTP プロトコルを通じて提供されますが、最新の Web アプリケーションの需要が高まるにつれて、データのリアルタイム更新がより重要になってきています。これには、変更に迅速に対応するために、双方向通信に WebSocket を使用する必要があります。
WebSocket は、HTML5 のクライアントとサーバー間の新しいタイプの通信チャネルです。長時間接続を維持することで、リアルタイムの双方向データ伝送を実現します。 HTTP リクエストとは異なり、WebSocket はリクエストごとに TCP ソケットを作成するのではなく、WebSocket 接続上で TCP ソケットを開きます。これは、WebSocket により、HTTP リクエストよりも高速かつ簡単にリアルタイムのデータ転送が可能になることを意味します。
この記事では、PHP API インターフェイスを使用して WebSocket と通信し、Web アプリケーションのデータをリアルタイムで更新する方法を紹介します。
1. Ratchet のインストール
WebSocket を使用するには、PHP で非常に人気のある WebSocket ライブラリである Ratchet をインストールする必要があります。 Ratchet を Github からダウンロードしてプロジェクトに追加することも、Composer を使用してインストールすることもできます。
Composer を使用している場合は、次のコマンドを実行できます:
composer require cboden/ratchet
これにより、Ratchet が自動的にインストールされます。インストールすると、WebSocket Server クラスを使用して WebSocket サーバーを作成できるようになります。
2. WebSocket サーバーの作成
Ratchet を使用すると、クライアントとのリアルタイム通信用の WebSocket サーバーを作成できます。以下は、基本的な WebSocket サーバーのサンプル コードです。
use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetWebSocketWsServer; require_once(__DIR__ . '/vendor/autoload.php'); class MyWebSocket implements MessageComponentInterface { public function onOpen(ConnectionInterface $conn) { // 当有新客户端连接时执行 echo "New connection! ({$conn->resourceId}) "; } public function onMessage(ConnectionInterface $from, $msg) { // 接收消息 echo "Received message: {$msg} "; // 回复消息 $from->send('Data received: ' . $msg); } public function onClose(ConnectionInterface $conn) { // 当客户端断开连接时执行 echo "Connection {$conn->resourceId} has disconnected "; } public function onError(ConnectionInterface $conn, Exception $e) { // 当出现错误时执行 echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } } // 创建WebSocket服务器 $server = IoServer::factory( new WsServer( new MyWebSocket() ), 8080 ); // 启动WebSocket服务器 $server->run();
上記のコードは、ポート 8080 からのクライアント接続を受け入れることができる WebSocket サーバーを作成します。実際のビジネス ロジックはなく、接続、メッセージ、切断イベントを出力するだけです。これを出発点として使用し、必要に応じて独自の WebSocket サーバー クラスをカスタマイズできます。
3. クライアントは WebSocket API を使用します
クライアント側では、WebSocket API を使用してサーバーとの接続を確立し、メッセージを送受信できます。以下は最も単純なクライアント WebSocket の例です:
var connection = new WebSocket('ws://localhost:8080'); connection.onopen = function () { console.log('WebSocket connected'); // 发送消息 connection.send('Hello, WebSocket server!'); }; connection.onmessage = function (event) { console.log('Received message: ' + event.data); }; connection.onclose = function (event) { console.log('WebSocket connection closed with code ' + event.code + ' and reason: ' + event.reason); }; connection.onerror = function (error) { console.log('WebSocket error: ' + error.message); };
このコードは、先ほど作成した WebSocket サーバーへの接続を試行します。接続イベントを受信すると、メッセージを送信します。サーバーからメッセージを受信すると、そのメッセージをコンソールに記録します。接続の終了やエラーの状況も処理します。
4. PHP API インターフェイスを介した WebSocket の使用
次に、PHP API インターフェイスを使用して WebSocket と通信する方法を考えてみましょう。従来の API ルーターを使用して WebSocket リクエストを処理できます。クライアントが WebSocket サーバーに接続するとき、Ratchet WebSocket の ConnectionInterface インターフェースを使用して関連情報を取得できます。この情報を使用して接続を認証し、認証されたユーザーのみが WebSocket サーバーに接続できるようにすることもできます。
以下はサンプル コードです:
use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetWebSocketWsServer; require_once(__DIR__ . '/vendor/autoload.php'); // 自定义WebSocket服务器类 class MyWebSocket implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { // 将新连接存储到$clients $this->clients->attach($conn); // 获取客户端地址 $client_ip = $conn->remoteAddress; // 处理新连接(验证身份、发送欢迎消息等) // ... } public function onMessage(ConnectionInterface $from, $msg) { // 处理收到的消息 // ... } public function onClose(ConnectionInterface $conn) { // 从$clients中删除关闭连接 $this->clients->detach($conn); // 处理关闭连接 // ... } public function onError(ConnectionInterface $conn, Exception $e) { // 处理WebSocket错误 // ... // 关闭连接 $conn->close(); } } // 创建WebSocket服务器 $server = IoServer::factory( new WsServer( new MyWebSocket() ), 8080 ); // 启动WebSocket服务器 $server->run();
onOpen メソッドでは、接続の確認、クライアントへのウェルカム メッセージの送信、新しい接続の記録などの処理を実行できます。 onClose メソッドでは、リストから接続を削除したり、他のクライアントにオフライン通知を送信したりするなど、接続を閉じるイベントを処理できます。
onMessage メソッドでは、WebSocket クライアントによって送信されたメッセージを処理できます。 WebSocket は双方向通信チャネルであるため、サーバーがクライアントにメッセージを送信するだけでなく、クライアントもサーバーにメッセージを送信できることを意味し、アプリケーションのデータ送受信機能が大幅に強化されます。
PHP API インターフェイスを介して WebSocket と通信すると、リアルタイムでデータを更新できます。これは、リアルタイム トランザクション、メッセージ プッシュ、ゲーム アプリケーションなどのリアルタイム アプリケーションにとって非常に重要です。
以上がPHP API インターフェース: WebSocket の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。