Hi Epic team,
We are currently developing a multiplayer co-op title in Unreal Engine. Our team has been building client-server games for some time and is comfortable with dedicated server architectures. While this particular game is primarily local and peer-to-peer in nature, which makes Listen Server an obvious choice, we are looking to avoid it due to some technical and bandwidth concerns.
Specifically, we have observed the following issues with the Listen Server approach:
- Increased CPU and memory overhead from rendering both the client and server in the same process.
- One relevant UDN thread highlights this: [Listen server rendering perf/memory [Content removed] The findings confirm that Listen Servers incur a measurable performance hit, particularly in complex levels or when using world partitioning and streaming.
- Limited replication coverage during local testing. Since the Listen Server is also a client, it bypasses key parts of the replication pipeline. To properly verify replicated behavior, we must launch a second client in the editor, which significantly increases iteration time and hardware load.
- Divergence from a true client-server runtime model. This can mask desync issues and edge cases that only appear when client and server are in separate processes with real network conditions.
- Higher QA burden. Even basic multiplayer flows must be tested with two players during development, including for solo or LAN use cases.
- While remote multiplayer testing will still be necessary with a dedicated server model, we have higher confidence in the results. This is because, even during local testing, the game is exercised from the perspective of a true client rather than a privileged Listen Server.
Our Goal:
We are looking to implement a system where the game launches a dedicated server instance internally (either in-process or as a subprocess), and the local player connects to 127.0.0.1. Remote players can then connect to the local player’s dedicated server.
Our Questions:
- Does Epic recommend or support the approach of running a dedicated server for local play instead of a Listen Server?
- Are there best practices or known limitations with this approach, particularly regarding Online Subsystems like Steam or EOS, port binding, or API usage across both processes?
- Is there any engine-level support or tooling to facilitate this setup more cleanly?
We appreciate any recommendations or insights you can share.
Thank you.