# Domain Server

The Vircadia Domain server is developed in this repositoryopen in new window and uses the following stack:

  1. HTML & JavaScript - Web based control panel
  2. Qtopen in new window - C++ framework
  3. Tooling
    1. VCPKGopen in new window
    2. CMakeopen in new window

# 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 hereopen in new window.

Specific build information for each platform:

# Packaging

All packaging specific information and steps for the Vircadia Domain server can be found hereopen in new window.

# Configuration

For configuration instructions, see the Hosting section of the user docsopen in new window.

# Assignment Client

# Command Line Parameters for 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).