The Vircadia Domain server (codename Athena) is developed in this repository and uses the following stack:
- 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 here.
Specific build information for each platform:
All packaging specific information and steps for the Vircadia Domain server can be found here.
For configuration instructions, see the Hosting section of the user docs.
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).