compassServer Browser

Get started with Server Browser quickly and explore example scenarios for various genres.

Server Browser is a managed service for Match-Bound and Persistent servers:

  • help players search and join suitable servers based on capacity, latency, or game parameters;

  • pre-warm new servers to serve global audiences at scale and prevent frustrating queues;

  • streamline server operations including updates, restarts, persistence, meshing, and more.

circle-check

✔️ Preparation

Testing this service is entirely free, no credit card required.

Free Tier allows up to 3 hours of runtime on our shared test cluster, after each restart.

This tutorial assumes you have already:

Functions and Flow

Server Browser: Flow and Hierarchy

Server Browser offers two main features:

▶️ Start Browsing with Game Clients to:

  • Discover and find suitable server instances, view slots, and reserve available capacity.

  • Reserve seats in an instance slot, retrieve connection details, and connect to servers.

  • Authenticate player connections in Deployments using Federated Identity.

  • Update instance slots' available capacity and/or metadata to modify discovery criteria.

🚀 Automated Scaling (optional) with Scaling Policies to:

  • Monitor available server instances, slots, capacity - per region and/or other criteria.

  • Deploy Servers to increase capacity with prewarming or just-in-time scaling.

  • Automate ops with special policies for demos, updates, testing, QA, tournaments, and more.

circle-info

After release, your server browser will need to run 24/7 to ensure players across the world can join servers.

▶️ Start Browsing

Learn about server/player lifecycle and their responsibilities to ensure efficient server use.

Authenticate

All requests must send an Authorization HTTP header with your secret Auth Token:

circle-exclamation

Server Browser automatically generates two types of tokens:

Discover Instance

circle-exclamation
circle-info

See 🚀 Automated Scaling to learn about Scaling Policies and start deployments automatically.

Required information for each server instance includes:

  • at least one Slot defined when initializing instance,

  • server connection details - URL, IP, port information, and location.

Optional custom metadata parameters for player filtering, sorting, and browsing; for example:

  • slot information - team capacity and team-specific metadata (e.g. team name),

  • name and tags - customizable, unique, human-readable and searchable labels;

  • compatibility data - server version or supported client versions;

  • latency qualifiers - city and region identifiers, and assigned Ping Beacons details;

  • game parameters - level/scene/map, game mode, difficulty, mods used;

  • any other custom parameters to help players filter and find a suitable server.

circle-info

Metadata parameters above are just examples, you can define any number of parameters as needed.

circle-check

Servers may update instance or slot metadata anytime to modify their discoverability criteria. When updating metadata, all indexed keys must be provided with valid values (even if not modified).

Server Instances must periodically send a keep-alive heartbeat to verify their ongoing availability and prevent players from joining crashed or offline servers. Missing heartbeat for the configured expiration period will automatically delete instance and any pending seat reservations.

circle-info

See Persistence for managing persistent world state and Active Caching for faster deployments.

Allocate Capacity

Instance and Slot capacity may be allocated in two ways, used individually or combined:

circle-check

Auto-Assigned Reservation

circle-info

Implement this feature if you wish to choose server automatically, based on regional capacity.

Players may create an auto-assigned reservation, only supplying player IDs and a scaling policy name. Server Browser will automatically find an instance with a slot offering sufficient joinable capacity and reserve seats, responding immediately with instance connection details.

If there is no suitable instance slot for this reservation, the response:

  • status code indicates whether the policy is scaling up and more capacity will be added,

  • header Retry-After indicates wait period (seconds) before retrying, if retryable.

Once a reservation is completed, you may skip to Connect to Server.

Search and Browse

circle-info

Implement this feature if you wish to show users a list of servers and allow custom reservations.

Players may list server instances and paginate through results to find a server they'd like to join.

Instances and slots may be filtered and sorted with built-in parameters or indexed metadata:

Property
Data Type
Instance
Slot

request_id

string

total_joinable_seats, total_available_seats

int

name

string

available_seats, reserved_seats

int

created_at, updated_at

string

metadata.{index} (custom)

string, int, float, bool

Available filtering operators depend on the data type of the filtered property:

Parameter
Operators
Example Filter (based on Simple Example)

string

eq or ne or

lt or le or

gt or ge or contains

int, float

eq or ne or

lt or le or

gt or ge

bool

eq or ne

circle-check
circle-info

Learn about cursor-based Pagination to let users fetch more results.

Reserve Seats

Before joining a server, a seat reservation is required to ensure that the instance offers sufficient available capacity. Reservations can include a group of players or a solo individual.

Federated Identity: Players must provide a unique third party player ID in their reservation. Sending the same ID once they Connect to Server will allow the server to verify their identity.

Once a reservation is made successfully (200 OKarrow-up-right) players should attempt connecting immediately. Pending reservations expire after 30 seconds (configurable) unless confirmed by your server.

Reservations exceeding slot's joinable seat capacity will be automatically rejected (409 Conflictarrow-up-right). Joinable seats are any available seats which have not been reserved by other players yet.

circle-info

Server may forcefully change any slot's capacity, add, delete, or update any slots. All reservations for a given slot will be removed if any pending reservations exceed new available slot capacity.

Connect to Server

Once a player found a suitable instance, they retrieve required connection details from (URL or IP, External Port). As soon as the seat reservation is made, players may proceed to connect to your deployment's game server and pass their player ID.

To connect from PIE (Editor) during development and testing, press the tilde key ~ and type open {URL}:{port} and wait for your editor to load the map.

circle-check

To authenticate new connections, your server must send a bulk reservation confirmation request with all new players' IDs, receiving information in confirmation response:

  • assignment of accepted player reservations to their preferred slot,

  • assignment of expired player reservations to their preferred slot,

  • a list of unknown player IDs.

Your server may decide how to handle each group of players and whether to allow or kick/ban expired or rejected users. Each of the instance's slots must be updated immediately with the new available seat count to ensure future reservations won't exceed slot capacity.

Abandon Server

When players leave, your server must increase available seat capacity for the assigned slot.

circle-check

Read about Recovery Objectives to prevent frustrating persistent server rollbacks.

🚀 Automated Scaling

Server Browser is compatible with several different methods of autoscoring:

The following guide will focus on pre-warming with Scaling Policies as the primary method.

circle-check

Monitor Capacity

Scaling policies continuously refresh the list of your server instances (discovered Deployments), repeating every monitoring_interval . Each policy requires a filter using the same filtering syntax as players do when searching for instances - per region, capacity, or other criteria.

Your configured minimum_active_instances amount can be treated either as a:

  • fixed capacity of deployments that you wish to keep running at all times,

  • pre-warm standby deployment buffer to hide initialization delays.

Fixed Capacity

Keep a fixed amount of active servers for games with Persistence, particularly when such games offer players to provision Community Servers.

This type of policy configuration is also sometimes used for Quality Assurance, Tournaments, Closed Alphas, Publisher Demos, or other kinds of limited capacity events and operations.

circle-info

Scaling policy helps you automatically restart and recycle crashed servers on the fly.

Pre-Warm Standby

Start servers ahead of player demand if:

  • you're launching a big release and expect rapid inflow of players in a short timespan,

  • or server initialization requires more than 30 seconds (not including deployment time),

  • or game implements meshing strategies requiring layered or circular network dependencies.

Deploy Servers

New deployments will be started automatically when the amount of monitored server instances drops below the configured minimum of active instances. All deployments are requested immediately and retried infinitely every monitoring interval after deployment_registration_period elapsed.

circle-exclamation

Policies start deployments with Private Fleets (with Overflow to Cloud) or directly to Cloud.

Available parameters include (see API specification):

  • application and version - build version, resources, and other orchestration parameters,

  • users - a single set of geographical coordinates for preferred server placement,

  • private host IDs - leave empty for cloud, or specify hosts within the desired region,

  • tags - tag with policy name to find deployments started with this policy later on,

  • environment variables - pass custom parameters and secrets to servers,

  • webhooks - notify your game backend (or matchmaker) of deployment lifecycle events,

  • require cached locations - if you prefer faster deployments only in cached locations.

Example Policies

Test and modify any of these policies as you need. Most games will use multiple policies.

A simple policy to keep one server deployed for testing at all times.

⚙️ Configuration

Server Browser API is generated from a JSON configuration specified when you create a new (or quick-restart) Server Browser. You may specify server and slot expiration, and custom metadata:

circle-info

For best performance, avoid specifying indices for metadata not used for filtering or sorting. Non-indexed params can be still set and read with server instance or slot details API methods, see 📗 API.

☁️ Hosting Cluster

Server Browser is conveniently hosted and managed 24/7 around the clock by Edgegap.

Choose a hosting option best suited for your goal:

  • Free Cluster (shared) to test all features and explore synergies with your design,

    • shuts down after 3 hours automatically, requiring restart to continue testing.

  • Private Cluster (dedicated) to ensure a stable environment for your production needs,

    • pick your region and get 24/7 support for live games to release with confidence.

Private Cluster Tiers

We currently offer 3 private cluster tiersarrow-up-right to cater to everybody’s needs:

Tier
Hobbyist Tier
Studio Tier
Enterprise Tier

Best Suited For

enthusiasts, solo developers

commercial releases

high-traffic launches

Resources

1 vCPU + 2GB RAM

6 vCPU + 12GB RAM

18 vCPU + 48GB RAM

Redundancy

1x virtual node

3x virtual nodes

3x virtual nodes

Rate Limit (req/s)

200

750

2,000

Price, hourly

$0.0312

$0.146

$0.548

Price, 30 days (nonstop usage)

$22.464

$105.12

$394.56

Upgrade to a private cluster with one click to benefit from highly available hosting maintained by Edgegap team with 24/7 live support for publicly released games.

Resource requirements for your instance will depend on factors:

  • number of players - more players result in more API requests,

  • number of requests per player - faster retries increase service load and consume resources,

  • number of servers - more servers result in more data stored and more API requests,

  • client retry fallback logic - retrying with jittered backoff helps spread traffic burst peaks,

  • average match duration - shorter sessions require more frequent server browser interaction.

circle-info

Our clusters use cloud machines featuring AMD/Intel CPUs with clock speed 2.4 - 3.2 GHz.

📗 API

Consider using our SDK for Unreal Engine or Unity to get started quickly with prebuilt examples.

Game Clients and Dedicated Servers send API requests throughout their lifecycle to Server Browser.

circle-info

Unity/Android - consider using raw string interpolationarrow-up-right to prevent code stripping of hardcoded JSONs.

circle-check

Import API specification to Scalar API Web Clientarrow-up-right or Swagger Editorarrow-up-right to inspect details.

Pagination

Server Browser provides cursor pagination to fetch filtered data incrementally in a specific order. This approach requires sending a cursor (starting point) and a page size (number of response items) whenever fetching more results, as opposed to the traditional limit-offset pagination.

circle-info

Combined with our proprietary database indexing system developed for game server metadata, cursor pagination provides a fast, consistent, and flexible user experience for filtering highly dynamic data.

Our goal is for users to find a suitable server on the first page. For best experience, we recommend showing cached results for previous pages, and only refreshing results when the user clicks Search.

🔖 Changelog

Semantic Versioning

Our developer tools and managed services use official Semantic Versioningarrow-up-right, indicating which updates are ✅ safe (minor, patch) and which may contain ⚠️ breaking changes (major).

Once a version is released, it will never be modified/changed.

circle-info

The latest version of server browser is 1.0.0 . Keep an eye out for updates and announcements.

Last updated

Was this helpful?