目次
環境の準備
WebSocket サーバーの作成
クライアント接続のバインド
ゲーム データの処理
コードの概要
ホームページ バックエンド開発 PHPチュートリアル PHP と WebSocket を介してリアルタイム オンライン ゲームを実装する方法

PHP と WebSocket を介してリアルタイム オンライン ゲームを実装する方法

Dec 17, 2023 pm 05:59 PM
リアルタイム オンラインゲーム php+websocket

PHP と WebSocket を介してリアルタイム オンライン ゲームを実装する方法

インターネット時代において、オンライン ゲームはエンターテイメントの形式としてますます人気が高まっています。多くのゲームではリアルタイムの対話が必要です。これは、サーバーとの接続の確立、リアルタイムのデータ送信、およびピアツーピア通信を意味するため、PHP と WebSocket を使用してゲーム データをリアルタイムでクライアントに送信することは優れたソリューションです。 。次に、PHPとWebSocketを使用してリアルタイムオンラインゲームを実装する方法を例を使って紹介します。

環境の準備

開始する前に、次のソフトウェアがインストールされていることを確認する必要があります:

  1. Apache サーバー
  2. PHP7 および WebSocket一致する PHP 拡張ライブラリ
  3. HTML5 ブラウザ

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 つのメソッドを提供します。

  1. onOpen: このメソッドは、新しいクライアントが接続したときに実行されます。このメソッドでは、接続を $clients 配列に保存します。
  2. onMessage: このメソッドは、クライアントが新しいメッセージを送信するときに実行されます。このメソッドでは、受信したデータを処理し、他のクライアントにデータを送信できます。
  3. onClose: このメソッドは、クライアントが接続を閉じるときに実行されます。このメソッドでは、$clients 配列から接続を削除します。
  4. onError: このメソッドはエラーが発生したときに実行されます。

WebSocket サーバーを用意したので、このサーバーを使用してクライアントからのデータを処理し、他のクライアントにデータを送信します。

クライアント接続のバインド

クライアント側では、WebSocket プロトコル経由でサーバーに接続し、ゲームを初期化する必要があります。

var conn = new WebSocket('ws://localhost:8080');

conn.onopen = function(e) {
    // 发送初始化消息
    conn.send('init');
};

conn.onmessage = function(e) {
    // 处理服务器发送的数据
    handleServerMessages(e.data);
};
ログイン後にコピー

コードの説明:

  1. WebSocket オブジェクトを使用して接続を初期化し、それをサーバーのアドレスとポートにバインドします。
  2. 接続が確立されると、conn.send() メソッドを通じて初期化データがサーバーに送信されます。なお、ここでは初期化データとして init を使用していますが、実際のシナリオに応じてデータ内容を調整してください。
  3. サーバーはデータを受信すると、送信されたデータを処理するために onmessage メソッドを呼び出します。サーバーから送信されたデータはこのメソッドで処理できます。

ゲーム データの処理

クライアントがサーバーに接続して初期化すると、ゲーム データの処理を開始できます。

function handleServerMessages(data) {
    if (data === 'init') {
        // 初始化游戏
        return;
    }

    // 处理游戏数据
    // ...

    // 向服务器发送游戏数据
    conn.send(data);
}
ログイン後にコピー

説明:

  1. サーバーが初期化データを送信すると、メッセージをキャプチャしてゲームを初期化します。
  2. ゲームの実行中に、データをサーバーに送信し、サーバーから送信されたデータを処理できます。

コードの概要

上記の手順により、ゲーム データ送信を処理する 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法 Java と WebSocket の組み合わせ: リアルタイムのビデオ ストリーミングを実現する方法 Dec 17, 2023 pm 05:50 PM

インターネット技術の継続的な発展に伴い、リアルタイムビデオストリーミングはインターネット分野における重要なアプリケーションとなっています。リアルタイムのビデオ ストリーミングを実現するための主要なテクノロジには、WebSocket と Java が含まれます。この記事では、WebSocket と Java を使用してリアルタイムのビデオ ストリーミング再生を実装する方法を紹介し、関連するコード例を示します。 1. WebSocket とは WebSocket は、単一の TCP 接続で全二重通信を行うためのプロトコルであり、Web 上で使用されます。

C++ を使用して組み込みシステムのリアルタイム オーディオおよびビデオ処理機能を実装する C++ を使用して組み込みシステムのリアルタイム オーディオおよびビデオ処理機能を実装する Aug 27, 2023 pm 03:22 PM

C++を活用して組み込みシステムのリアルタイム音声・映像処理機能を実装 組み込みシステムの応用範囲はますます広がり、特に音声・映像処理分野では需要が高まっています。このような需要に直面して、C++ 言語を使用して組み込みシステムのリアルタイム オーディオおよびビデオ処理機能を実装することが一般的な選択肢になりました。この記事では、C++ 言語を使用して組み込みシステムのリアルタイム オーディオおよびビデオ処理機能を開発する方法と、対応するコード例を紹介します。リアルタイムのオーディオおよびビデオ処理機能を実現するには、まずオーディオおよびビデオ処理の基本プロセスを理解する必要があります。一般的に言えば、オーディオとビデオ

JavaScript ベースのリアルタイム翻訳ツールの構築 JavaScript ベースのリアルタイム翻訳ツールの構築 Aug 09, 2023 pm 07:22 PM

JavaScript ベースのリアルタイム翻訳ツールの構築 はじめに グローバル化の需要が高まり、国境を越えた交流や交換が頻繁に行われるようになったことで、リアルタイム翻訳ツールは非常に重要なアプリケーションとなっています。 JavaScript といくつかの既存の API を活用して、シンプルだが便利なリアルタイム翻訳ツールを構築できます。この記事では、JavaScript をベースにこの機能を実装する方法をコード例とともに紹介します。実装手順 ステップ 1: HTML 構造の作成 まず、単純な HTML を作成する必要があります。

Windows 11 でライブキャプションを即座にオンにする方法 Windows 11 でライブキャプションを即座にオンにする方法 Jun 27, 2023 am 08:33 AM

Windows 11 でライブ字幕を即座にオンにする方法 1. キーボードの Ctrl+L を押します。 2. [同意する] をクリックします。 3. 「英語 (米国) で字幕を追加する準備ができました」 (優先言語に応じて) というポップアップが表示されます。 4. さらに、歯車ボタンをクリックすると冒涜的な言葉をフィルタリングできますか?好み?悪口のフィルタリング 関連記事 Windows Server でアクティベーション エラー コード 0xc004f069 を修正する方法 Windows のアクティベーション プロセスが突然切り替わり、このエラー コード 0xc004f069 を含むエラー メッセージが表示されることがあります。ライセンス認証プロセスはオンラインですが、Windows Server を実行している一部の古いシステムではこの問題が発生する可能性があります。これらの予備チェックに合格し、合格しなかった場合は、

JavaScript に基づいてリアルタイム チャット ルームを構築する JavaScript に基づいてリアルタイム チャット ルームを構築する Aug 10, 2023 pm 11:18 PM

JavaScript に基づいてリアルタイム チャット ルームを構築する インターネットの急速な発展に伴い、人々はインスタント メッセージングとリアルタイムのインタラクティブ エクスペリエンスにますます注目を集めています。一般的なインスタント メッセージング ツールとして、リアルタイム チャット ルームは個人と企業の両方にとって非常に重要です。この記事では、JavaScript を使用して簡単なリアルタイム チャット ルームを構築する方法と、対応するコード例を紹介します。まず、チャット ルームの UI インターフェイスとしてフロントエンド ページが必要です。単純な HTML 構造の例を次に示します: <!DOCTYPE

iPhone の Apple TV アプリでライブアクティビティを無効にする方法 iPhone の Apple TV アプリでライブアクティビティを無効にする方法 Jun 29, 2023 pm 01:50 PM

ライブ イベントは、今後の注文やスポーツの試合などの最新情報を把握するのに最適な方法です。この新しい通知方法は iOS 16 のリリースで初めて導入され、iPhone への通知配信方法を改善するために設計されました。リアルタイム データを提供するアプリケーションはどれもリアルタイム アクティビティを活用でき、多くの一般的な用途は保留中の注文、進行中の試合のスコア、気象データ、今後のライブ ブロードキャストなどの追跡です。ライブ アクティビティは、スタンバイ モードでも常に通知センターに表示されます (スタンバイ モードを有効にし、iPhone がドッキングされている場合)。ただし、中断のないエクスペリエンスを得るために Apple TV を使用する場合は、ライブ アクティビティを無効にすることができます。 iPhone でそれを行う方法は次のとおりです。 Apple TVを無効にする方法

JavaScript に基づいてリアルタイムの株価表示を構築する JavaScript に基づいてリアルタイムの株価表示を構築する Aug 08, 2023 am 08:03 AM

JavaScript に基づいたリアルタイム株価表示の構築の概要: 金融市場の継続的な発展に伴い、リアルタイム株価表示は投資家やトレーダーにとってますます重要になってきています。現代の取引プラットフォームでは、リアルタイムの株価表示機能を提供することが不可欠です。この記事では、JavaScript といくつかの関連テクノロジを使用して、シンプルなリアルタイム株価表示アプリケーションを構築する方法を紹介します。準備作業 開始する前に、次の作業を準備する必要があります: HTML と CSS に基づく Web ページのフレームワーク

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

See all articles