PHP と Websocket を使用してリアルタイムのゲーム データ同期を実現する方法

WBOY
リリース: 2023-06-28 09:44:01
オリジナル
1216 人が閲覧しました

インターネット技術の発展に伴い、ゲーム分野でもリアルタイムのゲームデータ同期を実現する必要があります。 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート