Steam のゲームサーバーを動かす手順|サーバーブラウザー・ISteamGameServer
Steam Game Servers API は、ゲームの専用サーバーの作成に使う API です。ゲームサーバーは、自分でホストすることも、コミュニティがホストすることもできます。
ゲームサーバーの API でできること
Steam Game Servers API は、ゲームの専用サーバーの作成に使う API です。ゲームサーバーは、自分でホストすることも、コミュニティがホストすることもできます。
コミュニティに専用サーバーのホストを許可する場合は、専用サーバーファイルへのアクセスを与える際に特に考慮すべき点があります。詳細は、Steamworks ドキュメントの「専用ゲームサーバーの配布」にあります。
サーバー側の始め方
ISteamGameServer のインスタンスの初期化には、InitGameServer があります。InitGameServer は SteamGameServer_Init から呼び出され、通常は直接呼び出す必要はありません。InitGameServer には、次の値を渡します。
| 引数 | 内容 |
|---|---|
unIP |
バインドする IP アドレスです(ホスト順。例 127.0.0.1 == 0x7f000001)。すべてのローカル IPv4 アドレスのバインドに INADDR_ANY を使用できます。 |
usGamePort |
ゲームプレイのためにクライアントが接続するポートです。 |
usQueryPort |
サーバーブラウザー関連とクライアントからの情報 ping を管理するポートです。 |
unFlags |
1つ以上の ServerFlags の結合です。 |
nGameAppId |
このサーバーを使うゲームの AppID です。 |
pchVersionString |
バージョン文字列です。形式は通常 x.x.x.x で、サーバーが古くなったことを検出するためにマスターサーバーによって使用されます(最新バージョンのサーバーのみがリストされます)。 |
ゲームサーバーは、次の関数でログオンします。
| 関数 | 内容 |
|---|---|
LogOn |
永続的なゲームサーバーアカウントにログインするプロセスを開始します。 |
LogOnAnonymous |
一般的な匿名アカウントにログインします。 |
どちらの関数も、SteamServerConnectFailure_t・SteamServersConnected_t・SteamServersDisconnected_t の各コールバックをトリガーします。BLoggedOn は、ゲームサーバーがログオンしているかを確認します。true はサーバーがログオンしているときのみで、それ以外の状態では false です。
サーバーの情報を知らせる
サーバーの情報を設定する関数には、たとえば次のものがあります。
| 関数 | 内容 |
|---|---|
SetDedicatedServer |
専用サーバー(true)かリッスンサーバー(false)かを設定します。規定ではリッスンサーバーです。LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。 |
SetProduct |
ゲームの製品識別子を設定します。バージョンチェックの理由で、現在マスターサーバーによって使用されます。NULL または空の文字列以外の必要があります。すべてのゲームサーバーに必須で、LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。 |
SetGameDescription |
ゲームの説明を設定します。NULL または空の文字列以外の必要があり、k_cbMaxGameServerGameDescription より長くてはいけません。すべてのゲームサーバーに必須で、LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。 |
SetModDir |
ゲームディレクトリを設定します。ゲームがインストールされるディレクトリと同じである必要があります。フォルダー名のみで、パス全体ではありません。NULL または空の文字列以外の必要があり、k_cbMaxGameServerGameDir より長くてはいけません。すべてのゲームサーバーに必須で、LogOn または LogOnAnonymous を呼び出す前にのみ設定されます。 |
SetServerName |
サーバーブラウザー内に表示されるサーバー名を設定します。NULL または空の文字列以外の必要があり、k_cbMaxGameServerName より長くてはいけません。 |
SetMapName |
サーバーブラウザー内に報告するマップ名を設定します。NULL または空の文字列以外の必要があり、k_cbMaxGameServerMapName より長くてはいけません。 |
SetMaxPlayerCount |
サーバー上に同時に許可される最大プレイヤー数を設定します。この値はいつでも変更できます。 |
SetBotPlayerCount |
ゲームサーバー上のボット/AI プレイヤーの数を設定します。規定値は0です。 |
SetPasswordProtected |
ユーザーがログインを試みた際にゲームサーバーがパスワードを要求するかを設定します。 |
SetGameTags |
このサーバー用に "gametags" を定義する文字列を設定します。これは任意ですが、設定するとユーザーがマッチメイキング/サーバーブラウザーインターフェイスを値でフィルターできるようになります。NULL または空の文字列以外の必要があり、k_cbMaxGameServerTags より長くてはいけません。 |
SetKeyValue |
ルールのキー/値のペアを追加/更新します。 |
SetRegion |
地域識別子を設定します。これは任意のフィールドです。デフォルト値は空の文字列で、"全世界"(地域)を意味します。 |
ユーザーを認証する
ゲームサーバーは、BeginAuthSession でエンティティのチケットを検証します。BeginAuthSession には、検証する認証チケット pAuthTicket・そのバイト単位のサイズ cbAuthTicket・このチケットを送信したエンティティの Steam ID を渡します。cbAuthTicket は、このチケットを作成した呼び出しによって提供された pcbTicket のサイズである必要があります。
BeginAuthSession は、エンティティの Steam ID からのチケットが有効であり、再利用されていないことを検証します。コールバック ValidateAuthTicketResponse_t を受け取り、コールバックの戻り値が成功かどうかチェックされるまで、ID は確認されません。
チケットは、エンティティに対して ISteamUser::GetAuthSessionTicket または GetAuthSessionTicket で作成された後、検証のためにネットワークを介してもう一方のエンドエンティティへ提供される必要があります。エンティティがオフラインになったときやチケットがキャンセルされたときに、ValidateAuthTicketResponse_t コールバック用に登録されます。
EndAuthSession は、BeginAuthSession で開始された認証セッションを終了します。指定のエンティティとそれ以上プレイしなくなったときに呼び出される必要があります。マルチプレイヤーセッションの終了時に、EndAuthSession を呼び出す必要があります。
サーバーブラウザーとサーバーリスト
プレイヤーは、Steam クライアントまたは Steam オーバーレイからサーバーブラウザーを開けます。ISteamMatchmakingServers で利用可能な API 関数を使うと、サーバーブラウザーと同じデータを取得できます。
サーバーリストを要求する関数には、次のものがあります。
| 関数 | 要求するサーバーリスト |
|---|---|
RequestInternetServerList |
「インターネット」サーバーリスト |
RequestLANServerList |
「LAN」サーバーリスト |
RequestFriendsServerList |
「フレンド」サーバーリスト |
RequestFavoritesServerList |
「お気に入り」サーバーリスト |
RequestHistoryServerList |
「履歴」サーバーリスト |
RequestSpectatorServerList |
「観戦者」サーバーリスト |
どの関数も、それぞれのサーバーリストからゲームサーバーの新しいリストを要求します。RequestLANServerList 以外は、ユーザーが関心のあるサーバーのみを取得するフィルターの配列を渡します。pRequestServersResponse は、ISteamMatchmakingServerListResponse から継承するオブジェクトでなければなりません。戻り値は HServerListRequest で、新規の非同期サーバーリスト要求オブジェクトです。この要求オブジェクトは、使用が終了したら ReleaseRequest を呼び出して解放する必要があります。
リスト内で指定されたサーバーの詳細情報は、GetServerDetails で取得します。インデックス値の有効な範囲は GetServerCount を呼び出すことにより取得でき、ISteamMatchmakingServerListResponse::ServerResponded コールバックでもインデックス値を受け取ります。
ユーザーのお気に入りのサーバーの取得と操作には、たとえば ISteamMatchmaking の次の関数があります。
| 関数 | 内容 |
|---|---|
GetFavoriteGameCount |
お気に入りとユーザーがローカルに保存してある最近のゲームサーバーの数を取得します。 |
GetFavoriteGame |
お気に入りのゲームサーバーの詳細をインデックスで取得します。GetFavoriteGameCount を呼び出してから、これを呼び出す必要があります。 |
AddFavoriteGame |
ゲームサーバーをローカルのお気に入りリストに追加するか、リストにすでに存在する場合はサーバーのプレイ時間を更新します。 |
RemoveFavoriteGame |
ローカルのお気に入りリストからゲームサーバーを削除します。 |
ロビーとの関係
ロビーの作成・検索と、ゲームの開始時にゲームサーバーへ参加する流れは、ロビーとマッチメイキングを作る手順にあります。
情報源
- Steamworks — ゲームサーバー(Steam Game Servers API・Steamサーバーブラウザー・ゲームサーバーの配布)https://partner.steamgames.com/doc/features/multiplayer/game_servers?l=japanese確認日 2026-10-21
- Steamworks — ISteamGameServer インターフェイス(初期化・ログオン・サーバー情報の設定・認証セッション)https://partner.steamgames.com/doc/api/ISteamGameServer?l=japanese確認日 2026-10-21
- Steamworks — ISteamMatchmakingServers インターフェイス(サーバーリストの要求・サーバーの詳細)https://partner.steamgames.com/doc/api/ISteamMatchmakingServers?l=japanese確認日 2026-10-21
- Steamworks — ISteamMatchmaking インターフェイス(お気に入りのゲームサーバーの関数)https://partner.steamgames.com/doc/api/ISteamMatchmaking?l=japanese確認日 2026-10-21