Version: 2017.2
Master Server (Legacy)
Minimizando el Ancho de Banda de la Red (Legacy)

Construyendo los servidores de networking de unity por ti mismo (Legacy)

(Para nuevos proyectos puedes usar el Nuevo Networking System introducido en 5.1. Esta información es para antiguos proyectos usando el sistema antiguo de networking.)

El código fuente para todos los servidores de networking individuales pueden ser descargados desde Unity website. Esto incluye el test de conexión, facilitador, servidor maestro y servidor proxy.

Todos los paquetes fuentes incluyen la librería de networking 3.732 que maneja las funciones básicas de networking y proporciona plugins que se utilizan por servidores en red.

El paquete incluye tres diferentes tipos de archivos de proyecto, listos para su compilación:

  • Un proyecto Xcode 3.0 para Mac OS X
  • Un Makefile para Linux y Mac OS X
  • Una solution de Visual Studio 2008

Los proyectos de Xcode y Visual Studio se pueden abrir, compilar y construir. Para construir con el Makefile simplemente ejecute “make”. Debería funcionar con la configuración de compilación estándar en Linux y Mac OS X, si usted tiene gcc entonces debe funcionar. En Linux, podría necesitar instalar la librería ncurses.

Estructura

El Master Server

El Master Server utiliza una estructura de base de datos interna para hacerle seguimiento a la información del anfitrión.

Los hosts (anfitriones) envían mensajes con el identificador de mensajes RUM_UPDATE_OR_ADD_ROW y toda su información host anidada. Esto se procesa en la función OnReceive() en el archivo LightweightDatabaseServer.cpp. Esto es dónde todo mensaje aparece inicialmente y por lo tanto es un buen lugar para empezar si quiere hacerle seguimiento a cómo un mensaje se procesa. Una tabla se crea dentro de la estructura de la base de datos para cada game type (tipo de juego) que es configurado cuando utiliza la función MasterServer.RegisterHost. Todos los game type se agrupan con una table, si la tabla no existe, se crea dinámicamente en la función CreateDefaultTable()

Los datos de información del host se modifica por el master server. El puerto e IP del juego que se está registrando, como se ve por el master server, se inyecta a los datos del host. De esta manera podemos detectar el puerto e IP externo correcto en casos dónde el host tiene una dirección privada (dirección NAT). El puerto e IP de los datos host enviados por el servidor del juego es la dirección privada y puerto y esto se almacena para su uso después. Si el master server detecta que un cliente está solicitando los datos host para un servidor del juego y el servidor tiene la misma dirección IP entonces utiliza la dirección privada del servidor en vez de la externa. Esto es para manejar casos dónde le cliente y el servidor están en la misma red local, utilizando el mismo enrutador y direcciones NAT. Por lo tanto, tendrán la misma dirección externa y no se puede conectar a través de ella, necesita utilizar las direcciones privadas y estas funcionará en ese caso.

Los clientes envían mensajes con el identificador de mensaje ID_DATABASE_QUERY_REQUEST y qué game type están buscando. La tabla o lista host se recupera de la estructura de base de datos y se envía al cliente. Si no la encuentra, una lista host vacía se envía.

Todos los mensajes enviados al master server deben contener la información de versión que se revisa en la función CheckVersion(). En el momento cada versión de Unity se revisa configurará una versión del master server nueva interna y esto se revisa aquí. Por lo que si la rutina de comunicación del master server se cambia en cualquier punto será capaz de detectar unas versiones más viejas aquí y posiblemente referirse a otra versión del master server (si alguna en lo absoluto) o modifica el procesamiento de ese mensaje para tener en cuenta diferencias.

El Facilitator

El Facilitator utiliza el plugin NAT punchthrough de RakNet directamente sin modificaciones. Esto esencialmente es un peer que escucha en un puerto con el plugin NAT punchthrough cargado. Cuando un servidor y un cliente con direcciones NAT se conectan a este peer, serán capaces de realizar NAT punchthrough para conectarse el uno con el otro. Cuando Network.InitializeServer utilice NAT, la conexión se configura automáticamente para usted.

Master Server (Legacy)
Minimizando el Ancho de Banda de la Red (Legacy)