Skip to main content

Overview

The Vircadia Domain server (codename Athena) is developed in this repository and uses the following stack:

  1. HTML & JavaScript - Web based control panel
  2. Qt - C++ framework
  3. Tooling
    1. VCPKG
    2. CMake

Command Line Parameters

Environment Variables

Features

  • Networking
    • To support web, desktop, and mobile users in the same space, the Domain server connects with users over WebRTC and UDP simultaneously
  • Persistence
    • 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
  • Functionality
    • Server side scripting in JavaScript
    • Extend core with C++ plugins
  • Communication
    • Realtime spatial audio for all clients
    • Server-wide text messaging

Performance

  • 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:

Packaging

All packaging specific information and steps for the Vircadia Domain server can be found here.

Configuration

For configuration instructions, see the Hosting section of the user docs.

Assignment Clients

Command Line Parameters for Assignment Clients

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).