Cross-Server Synchronization
NetworkingReal-time cluster synchronization via Roblox MessagingService for instantaneous network-wide bans.
# The Cross-Server Banning Challenge
In large Roblox games with dozens or hundreds of concurrent server instances, an exploiter banned in Server A might immediately rejoin Server B if the system relies solely on asynchronous DataStore polling.
RAC solves this by implementing Distributed Messaging Synchronization using native Roblox MessagingService.
[Server 1: Admin executes PermBan]
│
├─► 1. Writes BanRecord to DataStoreService (Permanent)
│
└─► 2. Publishes to MessagingService topic "RAC_CrossServer_Ban"
│
┌────────────────────┴────────────────────┐
▼ ▼
[Server 2: Subscribed Listener] [Server 3: Subscribed Listener]
- Checks if target player is online - Checks if target player is online
- If online: player:Kick(...) - If online: player:Kick(...)
- Updates local activeBans memory cache - Updates local activeBans memory cache
# Subscribed Topics (Constants.TOPICS)
PunishmentManager.Init() registers two global communication channels:
# 1. CROSS_SERVER_BAN ("RAC_CrossServer_Ban")
When a ban is published:
- Every active game server receives the
Types.PunishmentRecordpayload. - The server checks if
Players:GetPlayerByUserId(record.userId)is currently present. - If present, the target is immediately kicked:
targetPlayer:Kick(string.format( "\n[RAC Security Enforcement]\nYou have been banned: %s\nAppeal at: %s", record.reason, appealUrl )) - The record is added to the server's in-memory
activeBanstable to reject any rejoin attempts during that server's lifetime.
# 2. CROSS_SERVER_UNBAN ("RAC_CrossServer_Unban")
When an administrator revokes a ban or accepts an appeal:
- An unban event containing
userIdis published. - All game servers purge
activeBans[userId], immediately allowing the player to enter game instances without waiting for server restarts.
# Performance & Latency
Across Roblox's global data center network, MessagingService ban propagation typically executes in $<50\text{ms}$. An exploiter cannot escape to another server before the ban is registered cluster-wide.
# Next Steps
- Learn about Appeals & Revocations.
- Review RBAC Authority to configure who can issue bans.