PUN Classic (v1)、PUN 2、Boltはメンテナンスモードとなっております。Unity2022についてはPUN 2でサポートいたしますが、新機能が追加されることはありません。お客様のPUNプロジェクトおよびBoltプロジェクトが停止することはなく、将来にわたってパフォーマンス性能が落ちることはありません。 今後の新しいプロジェクトについては、Photon FusionまたはQuantumへ切り替えていただくようよろしくお願いいたします。

A2S Service

本機能はPhoton Bolt Proバージョンで使用できます。

ゲームの発売後、ゲームサーバーの監視はメインのタスクの1つとなります。ゲームサーバーの監視からデータ、ダウンタイム、プレイヤー数などの分析を行うためです。
このことから、Photon BoltにはServer Query Protocolのビルトインの実装があります。これは、A2S Protocolとも呼ばれており、作成者はValveHalf-Lifeサーバーに初めて導入されました。

これは、実行中のゲームサーバーから以下のような情報取得するために作成されたシンプルなシリアル化プロトコルです:

  1. 現在のプレイヤーカウント;
  2. 現在のマップまたは読み込まれたシーン;
  3. ゲームモードなどの、ゲームに適用された一連のルール;
  4. とりわけ、ゲームのセッション情報

A2S Protocolについては、Valveの開発者サイトですべてのデータタイプ、クエリ手順、プロトコルの性能に至るまで詳しく説明されています。
主な技術資料へのリンクはこちら: https://developer.valvesoftware.com/wiki/Server_queries.
プロトコルについての詳細は こちらでご確認いただけます。

Photon Bolt A2Sサービスを使用する

使用前に、プロトコルが有効であること、ゲームサーバー上で実行していることを確認します。
Bolt SettingsウィンドウのMiscellaneousセクションにサービスを設定するオプションがあります。
バックグラウンドサービスの有効化・無効化を行い、データが取扱われるポートを設定することが可能です。

A2S Service Enable
A2Sサービス有効化

基本の使用設定で必要なのは有効化のみです。
内部で、PhotonBoltがゲームサーバー情報の一部を埋めます。

  1. 最大プレイヤー数;
  2. 現在のプレイヤーカウント;
  3. ゲームホストのオペレーティングシステム;
  4. 初期ゲームシーン;
  5. 会社名;
  6. 製品名;
  7. ゲームサーバーのバージョン;

情報を修正したり、全ての情報を入力するため、データの残りの部分を埋めるのに使用するAPIが提供されています。
このAPIには、Bolt.a2s.A2SManagerクラスを通してアクセスできます。以下の方法で行ってください。

  1. SetServerRules: サーバールールの追加または更新を行います。これはサーバーと関連づいた任意のデータの主なペアで、リクエストのあったクライアントに公開されています。;
  2. RemoveServerRule: サーバールールを削除します。;
  3. UpdateServerInfo: ゲーム名やサーバーのバージョンなどすべてのサーバー情報の更新に使用します。;
  4. SetPlayerInfo: この方法を使用すると、IDやスコアなどゲームサーバーに接続しているプレイヤーに関連するデータの更新が行えます。
    以下はAPIを使用したサンプルコードです:

C#

using Bolt.a2s;

[BoltGlobalBehaviour(BoltNetworkModes.Server)]
public class ServerQueryManager : Bolt.GlobalEventListener
{
    void Awake()
    {
        DontDestroyOnLoad(gameObject);
    }

    public override void BoltStartDone()
    {
        // Configure new rules of the server after Bolt starts
        A2SManager.SetServerRules("rule1", "value1");
        A2SManager.SetServerRules("rule2", "value2");
    }

    public override void SceneLoadLocalDone(string map)
    {
        // For the Server Player, you can pass null as BoltConnection
        A2SManager.SetPlayerInfo(null, "Photon Server");

        // Update the Game Server metadata
        A2SManager.UpdateServerInfo(
            gameName: "Bolt Simple Tutorial",
            serverName: "Photon Bolt Server",
            map : map,
            version: "1.0",
            serverType : ServerType.Listen,
            visibility : Visibility.PUBLIC
        );
    }

    public override void SceneLoadRemoteDone(BoltConnection connection)
    {
        // When remote clients finish loading scene
        // you can configure it's metadata
        A2SManager.SetPlayerInfo(connection, "Conn: " + connection.ConnectionId.ToString(), 0);
    }
}

サーバー情報を取得するためのツール

APIを使用して設定したすべてのデータは、メモリに格納され、A2Sクエリを作成できるツールであればそれを使用して取得できます。
有名なツールにqstatというものがあり、これが一番簡単にサーバー情報を取得できるツールとなります。

qstatはコマンドラインツールで、ほとんどのオペレーションシステムにインストール可能です。
ダウンロードやインストールに関しての情報は公式 Github リポジトリでご確認いただけます。
以下は、ゲームサーバーに関連するメタデータを取得するためのプログラムの基本的な使用方法についての説明です。:

bash

$ qstat -R -P -xml -a2s localhost:21777
  • -R: サーバールールをフェッチし表示します。;
  • -P: プレイヤー情報をフェッチし表示します。;
  • -xml: ステータスデータをXMLドキュメントとして出力します。;
  • -a2s: A2Sプロトコルを使用して、サーバーをクエリします。

呼び出すと、コンソール上で以下のような出力を受信します。:

XML

<?xml version="1.0" encoding="iso-8859-1"?>
<qstat>
    <server type="A2S" address="localhost:21777" status="UP">
        <hostname>localhost:21777</hostname>
        <name>Photon Bolt Server</name>
        <gametype></gametype>
        <map>Tutorial1</map>
        <numplayers>1</numplayers>
        <maxplayers>32</maxplayers>
        <ping>11</ping>
        <retries>0</retries>
        <rules>
            <rule name="protocol">1</rule>
            <rule name="gamedir"></rule>
            <rule name="gamename">Bolt Simple Tutorial</rule>
            <rule name="dedicated">1</rule>
            <rule name="sv_os">m</rule>
            <rule name="version">1.0</rule>
            <rule name="rule1">value1</rule>
            <rule name="rule2">value2</rule>
        </rules>
        <players>
        </players>
    </server>
</qstat>

ご覧の通り、情報はしっかり構造化されており、ゲームのサーバーの分析データを管理するのに簡単に使用できます。
これがツールの最も簡単な使用方法です。この他にも数種類のサーバーをスキャンしたり、フォーマット化された表に情報を表示するなど、いくつかのオプションがあります。

Server Queriesサービスを使用するためのその他のツール例:

  1. Python-valve:複数のValve製品やサービスに、A2S serverクエリを含むオールインワンのインターフェイスを提供しようとするPythonライブラリです。 リンクはこちら。
  2. source-query-net: ソースクエリプロトコルを使用してゲームサーバーから情報をクエリする.NETライブラリです。 リンクはこちら。
Back to top