ホームページ >バックエンド開発 >PHPチュートリアル >PHP と WebSocket を介してリアルタイム オンライン ゲームを実装する方法
インターネット時代において、オンライン ゲームはエンターテイメントの形式としてますます人気が高まっています。多くのゲームではリアルタイムの対話が必要です。これは、サーバーとの接続の確立、リアルタイムのデータ送信、およびピアツーピア通信を意味するため、PHP と WebSocket を使用してゲーム データをリアルタイムでクライアントに送信することは優れたソリューションです。 。次に、PHPとWebSocketを使用してリアルタイムオンラインゲームを実装する方法を例を使って紹介します。
開始する前に、次のソフトウェアがインストールされていることを確認する必要があります:
Ratchet ライブラリを使用して WebSocket サーバーを作成します。 PHP のバージョンが Ratchet ライブラリと互換性があること、および Ratchet ライブラリが正しくインストールされていることを確認してください。
require dirname(__DIR__) . '/vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; class GameServer implements MessageComponentInterface { private $clients = []; public function onOpen(ConnectionInterface $conn) { $this->clients[$conn->resourceId] = $conn; } public function onMessage(ConnectionInterface $from, $msg) { //可以在此处对接收到的数据进行处理 foreach($this->clients as $client) { if ($from !== $client) { //将消息发送给客户端 $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { unset($this->clients[$conn->resourceId]); } public function onError(ConnectionInterface $conn, Exception $e) { echo "Error: ".$e->getMessage(). " "; $conn->close(); } } $server = new RatchetApp('localhost', 8080); $server->route('/', new GameServer()); $server->run();
上記のコードを使用して、基本的な WebSocket サーバーを作成します。クライアントがサーバーに接続すると、サーバーは接続を $clients
配列に追加します。 1 つのクライアントがメッセージを送信すると、サーバーはそのクライアントを除くすべてのクライアントにメッセージを送信します。
上記のコードでは、GameServer
クラスを MessageComponentInterface
の実装として使用し、次の 4 つのメソッドを提供します。
onOpen
: このメソッドは、新しいクライアントが接続したときに実行されます。このメソッドでは、接続を $clients
配列に保存します。 onMessage
: このメソッドは、クライアントが新しいメッセージを送信するときに実行されます。このメソッドでは、受信したデータを処理し、他のクライアントにデータを送信できます。 onClose
: このメソッドは、クライアントが接続を閉じるときに実行されます。このメソッドでは、$clients
配列から接続を削除します。 onError
: このメソッドはエラーが発生したときに実行されます。 WebSocket サーバーを用意したので、このサーバーを使用してクライアントからのデータを処理し、他のクライアントにデータを送信します。
クライアント側では、WebSocket プロトコル経由でサーバーに接続し、ゲームを初期化する必要があります。
var conn = new WebSocket('ws://localhost:8080'); conn.onopen = function(e) { // 发送初始化消息 conn.send('init'); }; conn.onmessage = function(e) { // 处理服务器发送的数据 handleServerMessages(e.data); };
コードの説明:
conn.send()
メソッドを通じて初期化データがサーバーに送信されます。なお、ここでは初期化データとして init
を使用していますが、実際のシナリオに応じてデータ内容を調整してください。 onmessage
メソッドを呼び出します。サーバーから送信されたデータはこのメソッドで処理できます。 クライアントがサーバーに接続して初期化すると、ゲーム データの処理を開始できます。
function handleServerMessages(data) { if (data === 'init') { // 初始化游戏 return; } // 处理游戏数据 // ... // 向服务器发送游戏数据 conn.send(data); }
説明:
上記の手順により、ゲーム データ送信を処理する PHP WebSocket サーバーを作成し、クライアント上でデータ送信とゲーム処理を実装しました。以下は、完全な PHP および JavaScript コードの例です。
PHP サーバー:
require dirname(__DIR__) . '/vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; class GameServer implements MessageComponentInterface { private $clients = []; public function onOpen(ConnectionInterface $conn) { $this->clients[$conn->resourceId] = $conn; } public function onMessage(ConnectionInterface $from, $msg) { //可以在此处对接收到的数据进行处理 foreach($this->clients as $client) { if ($from !== $client) { //将消息发送给客户端 $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { unset($this->clients[$conn->resourceId]); } public function onError(ConnectionInterface $conn, Exception $e) { echo "Error: ".$e->getMessage(). " "; $conn->close(); } } $server = new RatchetApp('localhost', 8080); $server->route('/', new GameServer()); $server->run();
クライアント JavaScript コード:
var conn = new WebSocket('ws://localhost:8080'); conn.onopen = function(e) { // 发送初始化消息 conn.send('init'); }; conn.onmessage = function(e) { // 处理服务器发送的数据 handleServerMessages(e.data); }; function handleServerMessages(data) { if (data === 'init') { // 初始化游戏 return; } // 处理游戏数据 // ... // 向服务器发送游戏数据 conn.send(data); }
この例では、PHP と WebSocket を使用してリアルタイム オンライン ゲームを実装する方法を示し、サンプルを提供します。コード。ニーズに合わせて調整および変更できます。
以上がPHP と WebSocket を介してリアルタイム オンライン ゲームを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。