PHP WebSocket 開発例: 特定の機能を実装する具体的な事例
近年、Web アプリケーションの複雑化に伴い、従来の HTTP プロトコルの利用が減少しています。リアルタイム通信に効果的 いくつかの欠点が示されました。リアルタイム通信のニーズを満たすために、WebSocket が登場しました。
WebSocket は、単一の TCP 接続を介した全二重通信用のプロトコルであり、クライアントがリクエストを送信しなくても、サーバーがアクティブにデータをクライアントにプッシュできるようになります。これにより、リアルタイム通信、オンライン ゲーム、リアルタイム監視、その他のアプリケーションがより便利かつ効率的になります。
この記事では、PHP をベースにした WebSocket の開発例を紹介し、具体的な機能を実装する具体的なプロセスを学びます。
オンライン チャット ルーム アプリケーションを開発するとします。ユーザーは Web ページ上でメッセージを送信でき、他のユーザーはすぐに受信して返信できます。この機能には次の重要なポイントが含まれます。
composer require cboden/ratchet
<?php require 'vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; class Chat 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 onMessage(ConnectionInterface $from, $msg) { // 处理消息,比如将消息发送给其他在线用户 foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new Chat() ) ), 8080 ); $server->run();
php server.php を実行すると、WebSocket サーバーが起動します。
<script> var conn = new WebSocket('ws://localhost:8080'); conn.onopen = function() { console.log('Connected!'); } conn.onmessage = function(e) { console.log('Received: ' + e.data); } function sendMessage() { var message = document.getElementById('input').value; conn.send(message); } </script>
public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection! ({$conn->resourceId}) "; // 将新用户加入用户列表,并广播给其他在线用户 foreach ($this->clients as $client) { $client->send('New user has joined'); } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected "; // 将离线用户从用户列表中删除,并广播给其他在线用户 foreach ($this->clients as $client) { $client->send('A user has left'); } }
以上がPHP WebSocket開発例:具体的な機能の実装例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。