A2S 서비스

Contents

이 기능은 Photon Bolt Pro 버전에서 사용할 수 있습니다.

게임 서버 모니터링은 게임을 시작한 후 분석 데이터, 다운타임, 플레이어 수 등을 얻기 위한 주요 작업 중 하나입니다. 이 때문에 Photon Bolt는 Half-Life 서버에 처음 도입된 Valve에서 만든 A2S 프로토콜로 알려진 서버 쿼리 프로토콜(Server Query Protocol)을 내장하고 있습니다.

이 프로토콜은 게임 서버가 실행되는 동안 다음과 같은 정보를 검색하기 위해 만들어진 간단한 직렬화 프로토콜입니다.

  1. 현재 플레이어 수
  2. 현재 맵 또는 로드된 씬
  3. 게임 모드와 같이 게임에 적용되는 규칙 집합
  4. 특히 게임 세션에 대한 정보

A2S 프로토콜은 개발자 사이트에는 Valve의 모든 데이터 유형, 쿼리 절차, 프로토콜의 기능에 대한 설명이 상세하게 기술되어 있습니다. 기본 설명서 링크 : https://developer.valvesoftware.com/wiki/Server_queries 프로토콜에 대한 상세 정보는 여기에서 볼 수 있습니다.

Photon Bolt A2S 서비스를 사용

프로토콜을 사용하기 전에 게임 서버에서 이 프로토콜을 사용하고 실행 중인지 확인해야 합니다. Bolt 설정 윈도우의 Miscellaneous 섹션에 서비스를 구성하는 옵션이 있습니다. 백그라운드 서비스를 활성화/비활성화하고 데이터를 제공할 포트를 구성할 수도 있습니다.

A2S Service Enable
A2S 서비스 사용.

서비스를 활성화하면 기본 사용량을 설정할 수 있습니다. 내부적으로 Photon Bolt는 게임 서버에 대한 정보의 일부를 설정합니다.

  1. 최대 플레이어
  2. 현재 플레이어 수
  3. 게임 호스트 운영 체제
  4. 초기 게임 씬
  5. 회사 이름
  6. 제품 이름
  7. 게임 서버 버전

이 정보를 수정하거나 완성하기 위해, 나머지 데이터 부분을 채우는 데 사용할 수 있는 API를 제공합니다. 이 API는 Bolt.a2s.A2SManager 클래스의 다음 메소드를 통해 액세스할 수 있습니다.

  1. SetServerRules : 서버 규칙을 추가하거나 업데이트합니다. 이는 서버와 연결할 수 있으며 요청 클라이언트에 공개되는 임의 데이터의 키/값 쌍입니다.
  2. RemoveServerRule: 서버 규칙을 제거합니다
  3. UpdateServerInfo: 게임 이름 또는 서버 버전과 같은 모든 서버 정보를 업데이트하는 데 사용됩니다.
  4. SetPlayerInfo : 이 방법을 사용하여 이 게임 서버에 연결된 플레이어와 관련된 데이터를 ID나 점수처럼 업데이트할 수 있습니다.

다음은 이 API를 사용한 샘플 코드입니다.

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);
    }
}

Back To Top

서버 정보를 검색하는 도구

API를 사용하여 설정된 모든 데이터는 메모리에 저장되며 A2S 쿼리를 생성할 수 있는 모든 도구를 통해 검색할 수 있습니다. 이러한 목적을 위해 잘 알려진 도구 중 하나는 qstat이며 서버 정보를 검색하는 가장 간단한 방법입니다.

qstat은 대부분의 운영 체제에 설치할 수 있는 명령줄 도구입니다. 다운로드 및 설치 방법에 대한 정보는 공식 Github repository 에서 확인할 수 있습니다. 다음은 게임 서버와 연결된 메타데이터를 가져오는 프로그램의 기본 사용 방법을 보여 줍니다.

$ qstat -R -P -xml -a2s localhost:21777
  • -R: 서버 규칙을 가져오고 표시
  • -P: 플레이어 정보를 가져오고 표시
  • -xml: 상태 데이터를 XML 문서로 출력
  • -a2s: A2S 프로토콜을 사용하여 서버를 쿼리

호출 후에는 다음과 같은 내용이 콘솔에 출력됩니다.

<?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>

보시다시피, 정보는 구조가 잘 되어 있고 게임 서버의 분석 데이터를 유지 관리하는 데 쉽게 사용할 수 있습니다. 이는 도구의 가장 간단한 사용법일 뿐이며, 예를 들어 여러 서버를 검색하거나 포맷된 표에 정보를 표시하는 것과 같은 몇 가지 다른 옵션이 포함되어 있습니다.

서버 쿼리 서비스를 사용하기 위한 도구의 다른 예는 다음과 같습니다.

  1. Python-valve: A2S서버 쿼리를 포함한 다양한 Valve 제품 및 서비스에 일체형 인터페이스를 제공하고자 하는 Python 라이브러리입니다. 링크.
  2. source-query-net:소스 쿼리 프로토콜을 사용하여 게임 서버의 정보를 쿼리하는 .NET 라이브러리입니다. 링크.

기술문서 TOP으로 돌아가기