インターネット技術の発展に伴い、ゲーム分野でもリアルタイムのゲームデータ同期を実現する必要があります。 WebSocket プロトコルは、クライアントとサーバー間の双方向通信に使用されるテクノロジーであり、リアルタイムのデータ同期の可能性を提供します。
この記事では、PHP と WebSocket を使用してリアルタイムのゲーム データ同期を実現する方法を紹介します。具体的な実装手順は次のとおりです:
ステップ 1: WebSocket を理解する
WebSocket は HTML5 プロトコルであり、クライアントとサーバー間の永続的な接続を利用して、リアルタイムの双方向通信を実現します。 WebSocket 接続が確立されると、サーバーとクライアントは相互にリアルタイム データを送信して、リアルタイム同期を実現できます。
ステップ 2: WebSocket サーバーを作成する
PHP では、Ratchet ライブラリを使用して WebSocket サーバーを実装できます。 Ratchet は、接続とデータの送受信を処理するイベント ライブラリとして ReactPHP を使用する PHP WebSocket 実装ライブラリです。
まず、依存関係を管理するために Composer をインストールする必要があります。プロジェクトのルート ディレクトリにcomposer.json ファイルを作成し、次のコードを記述します:
{
"require": { "cboden/ratchet": "^0.4.3", "react/event-loop": "^1.0.0", "react/socket": "^1.0.0", "react/http": "^1.0.0" }
}
次に、コマンド ラインで次のコマンドを実行してインストールします。 Ratchet とその依存関係:
composer install
次に、WebSocket サーバーのエントリ ポイントとなる、server.php というファイルを作成します。次のコードを使用して、このファイルに WebSocket サーバー インスタンスを作成します。
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
RatchetWebSocketWsServer を使用;
require dirname(__DIR__) . '/vendor/autoload.php';
class ゲームは MessageComponentInterface を実装します
{
protected $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 ($from !== $client) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); } public function onError(ConnectionInterface $conn, Exception $e) { $conn->close(); }
}
$server = IoServer::factory(
new HttpServer( new WsServer( new Game() ) ), 8080
);
$server->run();
Game というクラスを作成しました。 WebSocketのハンドラ。このクラスは、Ratchet の MessageComponentInterface インターフェイスを実装します。次の 4 つのメソッドを実装する必要があります: onOpen は、新しい WebSocket クライアントが接続されたときを示し、onMessage は、クライアントによって送信されたメッセージが受信されたときを示し、onClose は、WebSocket クライアントが切断されたときを示します。エラーが発生します。
Game クラスでは、SplObjectStorage オブジェクトを使用して、接続されているすべてのクライアントを保存します。 onOpen メソッドでは、接続オブジェクトを SplObjectStorage にアタッチします。 onMessage メソッドでは、SplObjectStorage 内のすべてのクライアントをループし、受信したメッセージを送信します。 onClose メソッドでは、SplObjectStorage から接続オブジェクトを削除します。
最後に、IoServer クラスを使用して WebSocket サーバーを作成して実行します。 HTTP リクエストと WebSocket リクエストの両方を処理できるように、HttpServer と WsServer を一緒にラップします。 WebSocket サーバーのポート番号として 8080 を使用しましたが、必要に応じて変更できます。
ステップ 3: WebSocket クライアントを作成する
クライアントでは、JavaScript を使用して WebSocket 接続を実装します。 JavaScript では、WebSocket オブジェクトを作成してサーバーに接続する必要があります。 WebSocket オブジェクトの状態が変化すると、WebSocket イベント ハンドラーが呼び出されて処理されます。
ここでは、jQuery を使用して DOM 要素を簡単に操作し、イベントを処理します。まず、サーバーにメッセージを送信するための単純なテキスト入力ボックスとボタンを HTML で作成します。
<title>Real-time Game Data Synchronization</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="client.js"></script>
<input type="text" id="message"> <button id="send">Send</button> <div id="messages"></div>
次に、client.js という名前の JavaScript ファイルを作成します。 WebSocketクライアント。次のコードを使用して、このファイルに WebSocket 接続を作成します:
$(document).ready(function() {
var conn = new WebSocket('ws://localhost:8080'); conn.onopen = function(evt) { console.log('Connected to server'); }; conn.onmessage = function(evt) { console.log('Received message: ' + evt.data); $('#messages').append($('<p>').text(evt.data)); }; conn.onclose = function(evt) { console.log('Connection closed'); }; $('#send').click(function() { var message = $('#message').val(); conn.send(message); $('#message').val(''); });
});
最初にa 読み込みが完了したら WebSocket 接続を作成し、接続が開かれたときに onopen メソッドを呼び出します。 onmessage メソッドでは、受信したメッセージをコンソールとページ上のメッセージ ボックスに出力します。接続が閉じられると、onclose メソッドが呼び出されます。
ボタンをクリックすると、テキスト入力ボックスからメッセージを取得し、WebSocket サーバーに送信します。
ステップ 4: WebSocket 接続をテストする
最後に、ブラウザを使用して WebSocket 接続をローカルでテストできます。コマンド ラインで WebSocket サーバーを実行するには、次のコマンドを実行します:
php server.php
次に、ブラウザを開いて次の URL を入力します:
http: // localhost:8000/
ページにメッセージを入力して「送信」ボタンをクリックすると、サーバーでメッセージを受信してクライアントに送り返すことができます。ページ上にメッセージ ボックスが表示され、コンソール出力に対応するメッセージが表示されます。
これまでのところ、PHP と WebSocket を使用してリアルタイムのゲーム データ同期を実現することに成功しています。リアルタイムのデータ同期は、ゲームだけでなく、ライブチャットや共同編集などのさまざまなアプリケーションでも利用できます。この記事が WebSocket の仕組みを理解し、WebSocket の実装をガイドするのに役立つことを願っています。
以上がPHP と Websocket を使用してリアルタイムのゲーム データ同期を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。