A2S Service
本機能はPhoton Bolt Proバージョンで使用できます。
ゲームの発売後、ゲームサーバーの監視はメインのタスクの1つとなります。ゲームサーバーの監視からデータ、ダウンタイム、プレイヤー数などの分析を行うためです。
このことから、Photon BoltにはServer Query Protocol
のビルトインの実装があります。これは、A2S Protocol
とも呼ばれており、作成者はValve
でHalf-Life
サーバーに初めて導入されました。
これは、実行中のゲームサーバーから以下のような情報取得するために作成されたシンプルなシリアル化プロトコルです:
- 現在のプレイヤーカウント;
- 現在のマップまたは読み込まれたシーン;
- ゲームモードなどの、ゲームに適用された一連のルール;
- とりわけ、ゲームのセッション情報
A2S Protocol
については、Valve
の開発者サイトですべてのデータタイプ、クエリ手順、プロトコルの性能に至るまで詳しく説明されています。
主な技術資料へのリンクはこちら: https://developer.valvesoftware.com/wiki/Server_queries.
プロトコルについての詳細は こちらでご確認いただけます。
Photon Bolt A2Sサービスを使用する
使用前に、プロトコルが有効であること、ゲームサーバー上で実行していることを確認します。
Bolt Settings
ウィンドウのMiscellaneous
セクションにサービスを設定するオプションがあります。
バックグラウンドサービスの有効化・無効化を行い、データが取扱われるポートを設定することが可能です。
基本の使用設定で必要なのは有効化のみです。
内部で、PhotonBoltがゲームサーバー情報の一部を埋めます。
- 最大プレイヤー数;
- 現在のプレイヤーカウント;
- ゲームホストのオペレーティングシステム;
- 初期ゲームシーン;
- 会社名;
- 製品名;
- ゲームサーバーのバージョン;
情報を修正したり、全ての情報を入力するため、データの残りの部分を埋めるのに使用するAPIが提供されています。
このAPIには、Bolt.a2s.A2SManager
クラスを通してアクセスできます。以下の方法で行ってください。
SetServerRules
: サーバールールの追加または更新を行います。これはサーバーと関連づいた任意のデータの主なペアで、リクエストのあったクライアントに公開されています。;RemoveServerRule
: サーバールールを削除します。;UpdateServerInfo
: ゲーム名やサーバーのバージョンなどすべてのサーバー情報の更新に使用します。;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
サービスを使用するためのその他のツール例:
Python-valve
:複数のValve製品やサービスに、A2S server
クエリを含むオールインワンのインターフェイスを提供しようとするPythonライブラリです。 リンクはこちら。source-query-net
: ソースクエリプロトコルを使用してゲームサーバーから情報をクエリする.NETライブラリです。 リンクはこちら。