All projects
Infrastructure & DevOps

SeaTyrants GameServer — MMORPG infrastructure

High-frequency UDP game server on Kubernetes

An MMORPG infra that holds 128 Hz, map per map, behind a UDP proxy.

The client need

Context

SeaTyrants is a real-time MMORPG that must serve thousands of players with low latency and a high server tick rate.

Problem

No infra capable of splitting maps, holding 128 Hz per tick and routing UDP traffic in a scalable way.

Goal

Build a Kubernetes infrastructure able to scale per map and hold real time on the UDP network.

What’s at stake

  • Hold a 128-tick-per-second cadence on the server side

  • Scale horizontally map by map

  • Route UDP traffic reliably and efficiently

  • Manage concurrency (mutex, multi-threading) without breaking the tick rate

The proposed solution

What was built

A Kubernetes infrastructure where each game map maps to a dedicated pod, powered by a UDP server forked from ENET, an event-driven NATS bus and a Quilkin UDP proxy at the edge.

Why this choice

Splitting per map allows independent scaling, Quilkin handles UDP routing, NATS decouples services, and ENET remains one of the most solid UDP protocols for real-time games.

How it answers the need

One pod per map, multi-threading and mutexes on the game process side, NATS for cross-service events, Quilkin for UDP routing, infra-side load balancers to absorb load.

Key features

  • One Kubernetes pod per game map

  • UDP server based on a fork of ENET

  • 128 Hz tick rate on the server side

  • NATS event bus for inter-service communication

  • Quilkin UDP proxy and infra-side load balancers

  • Synchronisation via mutex and multi-threading

Results

  • Infra capable of holding real time for an MMORPG

  • Per-map scalability without breaking server tick rate

  • Event-driven architecture ready to evolve

Tech stack

Technical choices used on this project.

KubernetesENET (fork)C / C++NATSQuilkinDockerLinux

Do you have a similar need?

Let’s talk about your project. I help you adapt this approach to your context.