A2S 서비스
이 기능은 Photon Bolt Pro 버전에서 사용할 수 있습니다.
게임 서버 모니터링은 게임을 시작한 후 분석 데이터, 다운타임, 플레이어 수 등을 얻기 위한 주요 작업 중 하나입니다.
이 때문에 Photon Bolt는 Half-Life
서버에 처음 도입된 Valve
에서 만든 A2S 프로토콜
로 알려진 서버 쿼리 프로토콜(Server Query Protocol
)을 내장하고 있습니다.
이 프로토콜은 게임 서버가 실행되는 동안 다음과 같은 정보를 검색하기 위해 만들어진 간단한 직렬화 프로토콜입니다.
- 현재 플레이어 수
- 현재 맵 또는 로드된 씬
- 게임 모드와 같이 게임에 적용되는 규칙 집합
- 특히 게임 세션에 대한 정보
A2S 프로토콜
은 개발자 사이트에는 Valve
의 모든 데이터 유형, 쿼리 절차, 프로토콜의 기능에 대한 설명이 상세하게 기술되어 있습니다.
기본 설명서 링크 : https://developer.valvesoftware.com/wiki/Server_queries
프로토콜에 대한 상세 정보는 여기에서 볼 수 있습니다.
Photon Bolt A2S 서비스를 사용
프로토콜을 사용하기 전에 게임 서버에서 이 프로토콜을 사용하고 실행 중인지 확인해야 합니다.
Bolt 설정
윈도우의 Miscellaneous
섹션에 서비스를 구성하는 옵션이 있습니다.
백그라운드 서비스를 활성화/비활성화하고 데이터를 제공할 포트를 구성할 수도 있습니다.
서비스를 활성화하면 기본 사용량을 설정할 수 있습니다.
내부적으로 Photon Bolt는 게임 서버에 대한 정보의 일부를 설정합니다.
- 최대 플레이어
- 현재 플레이어 수
- 게임 호스트 운영 체제
- 초기 게임 씬
- 회사 이름
- 제품 이름
- 게임 서버 버전
이 정보를 수정하거나 완성하기 위해, 나머지 데이터 부분을 채우는 데 사용할 수 있는 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
repository 에서 확인할 수 있습니다.
다음은 게임 서버와 연결된 메타데이터를 가져오는 프로그램의 기본 사용 방법을 보여 줍니다.
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>
보시다시피, 정보는 구조가 잘 되어 있고 게임 서버의 분석 데이터를 유지 관리하는 데 쉽게 사용할 수 있습니다.
이는 도구의 가장 간단한 사용법일 뿐이며, 예를 들어 여러 서버를 검색하거나 포맷된 표에 정보를 표시하는 것과 같은 몇 가지 다른 옵션이 포함되어 있습니다.
서버 쿼리 서비스를 사용하기 위한 도구의 다른 예는 다음과 같습니다.
Python-valve
: A2S서버 쿼리를 포함한 다양한 Valve 제품 및 서비스에 일체형 인터페이스를 제공하고자 하는 Python 라이브러리입니다. 링크.source-query-net
:소스 쿼리 프로토콜을 사용하여 게임 서버의 정보를 쿼리하는 .NET 라이브러리입니다. 링크.