# Domain Server
The Vircadia Domain server is developed in this repositoryopen in new window and uses the following stack:
- Qtopen in new window - C++ framework
- To support web, desktop, and mobile users in the same space, the Domain server connects with users over WebRTC and UDP simultaneously
- The world's state is continuously persisted to disk
- The persisted state can be saved to a snapshot at any time
- The persisted state is also backed up regularly through a rolling schedule
- Scalability & Robustness
- To enable scaling for hundreds or thousands of users in one instance, all major functions (avatars, entities, assets, messaging, etc.) are broken out into sub processes called Assignment clients
- Due to the rapid start and stop of Assignment clients, the scaling of worlds and recovery of mixers in real-time is nearly instant
- Extend core with C++ plugins
- Realtime spatial audio for all clients
- Server-wide text messaging
- Specs: Amazon EC2 C5a (32 AMD Epyc cores)
- Audio Codec: Opus, tuned for quality
- All mixers on the same instance
A test conducted under these conditions during a live conference in world yielded 4.5 users per core with 32 cores, therefore maxing out at 140 users.
Under a configuration with more cores, a performance tuned audio codec, and splitting assignment clients across multiple servers it is possible to support many hundreds of users in real-time, in a single instance.
# Compiling from Source
You can find general build information hereopen in new window.
Specific build information for each platform:
All packaging specific information and steps for the Vircadia Domain server can be found hereopen in new window.
For configuration instructions, see the Hosting section of the user docsopen in new window.
# Assignment Client
The Domain server deploys a type of server called an Assignment client to provide different functionalities to a virtual world. Six types are defined and the domain server will spin up one instance of each:
- Asset Server - Allows the upload and download of files from the server.
- Audio Mixer - Receives all audio streams and mixes them into single streams to send out to each node (user).
- Avatar Mixer - Receives all avatar and joint data and mixes them into single streams to send out to each node (user).
- Entity Mixer - Handles the state of all entities and their respective properties in a virtual world.
- Entity Script Server - Provides server side scripting functionality.
- Messaging Mixer - Handles all messaging activity between nodes on the domain (users).