Skip to main content

Cómo ejecutar un servidor de juegos con LocalMultiplayerAgent en modo de contenedor

Este tutorial describe cómo:
  • Crear una compilación de contenedor [Linux/Windows] con el ejemplo Wrapper
  • Configurar MultiplayerSettings.json
  • Configurar Docker
  • Ejecutar LocalMultiplayerAgent
  • Probar la conexión con su juego

Crear una compilación de contenedor [Linux/Windows]

Si no está familiarizado con los contenedores, consulte Introducción a los contenedores y Docker. Aprenderemos a empaquetar un ejemplo existente como contenedor de Windows o Linux. Deberá configurar opciones diferentes según la plataforma (contenedor basado en Windows/Linux). Aquí usaremos el ejemplo Wrapper y repasaremos los detalles.

Compilación de contenedor de Linux

Puede ejecutar los ejecutables wrapper y fakegame en una compilación de Linux, mediante contenedores de Linux. En este caso, debe crear una compilación de Linux. Para obtener información sobre cómo crear una compilación de Linux de Wrapper, consulte cómo crear una imagen de contenedor de Linux

Compilación de contenedor de Windows

LMA creará una compilación de contenedor de Windows por usted. Solo necesita configurar las opciones correctamente (consulte más adelante cómo configurar las opciones para el contenedor de Windows)

Configurar MultiplayerSettings.json

Vaya a la carpeta donde extrajo el conjunto de herramientas de LMA y abra el archivo MultiplayerSettings.json. Este archivo es un archivo ficticio de configuración de compilación que simula la compilación en MPS. También puede rellenar un json con el Generador de MultiplayerSettings.json de LMA. El Generador es una página web sencilla que crea un json basado en sus opciones. Puede encontrar el Generador en LocalMultiplayerAgent/SettingsJsonGenerator. Este es el ejemplo de MultiplayerSettings.Json para ejecutar el ejemplo Wrapper como Linux Container.
Para Windows Container, no es necesario compilar el contenedor. LMA empaquetará su servidor de juegos como contenedor de Windows. Solo necesita especificar la imagen base del contenedor de Windows en el campo ImageDetails y establecer LocalFilePath en la ubicación donde se encuentra su recurso de juego en su estación de trabajo.
Asegúrese de actualizar correctamente los campos siguientes en el archivo MultiplayerSettings.json para ejecutar LMA en modo de contenedor.
  • LocalFilePath: ruta local completa (en su estación de trabajo) al archivo zip del recurso del servidor de juegos creado anteriormente, por ejemplo: D:\gameassets.zip (tenga en cuenta que las barras diagonales inversas deben escaparse para el formato JSON). Este campo es obligatorio para el contenedor de Windows, ya que LMA necesita localizar su recurso de juego y luego empaquetarlo en un contenedor.
  • PortMappingsList: estos son los puertos que están disponibles para su juego mientras se ejecuta.
    • NodePort es el puerto que se abre en su estación de trabajo y se asignará al GamePort.
    • GamePort.Number es el puerto al que su servidor de juegos debe enlazarse cuando se ejecuta en un contenedor. Por ejemplo, aquí establecemos el número de puerto en 80, que es el que escuchará fakegame.exe.
    • Establezca GamePort.Name en el mismo valor definido en su servidor de juegos. Puede comprobar la configuración del GSDK en tiempo de ejecución para obtener el valor con la clave GamePort.Name.
    • GamePort.Protocol: especifique el tipo de protocolo: TCP o UDP
    Actualice la sección GamePort para que coincida con el protocolo y el puerto en los que su servidor de juegos escucha a los clientes. Puede agregar varios puertos.
  • ForcePullFromAcrOnLinuxContainersOnWindows: establézcalo en true cuando quiera extraer la imagen de contenedor de Linux desde el registro de Docker y evitar la extracción desde el registro local. En la mayoría de los casos, querrá establecerlo en false.
  • ContainerStartParameters.ImageDetails: la imagen de su servidor de juegos puede publicarse en un registro de contenedores o compilarse localmente. Si desea extraer la imagen de contenedor de Linux desde el registro de Docker (por ejemplo, Azure Registry), debe establecer el valor de nombre de usuario y contraseña, y establecer ForcePullFromAcrOnLinuxContainersOnWindows en true. Para el contenedor de Windows, el nombre de usuario y la contraseña no son necesarios.
  • OutputFolder: ruta a una unidad o carpeta donde se generan las salidas y los archivos de configuración. Asegúrese de que haya suficiente espacio disponible, ya que el servidor de juegos se extraerá en esta ruta. Si no se especifica, se usa la carpeta del agente.
  • AgentListeningPort: este es el puerto que usa LMA para comunicarse con el servidor de juegos. Cualquier puerto abierto funcionará; 56001 es el valor predeterminado. Si tiene otro proceso enlazado al puerto 56001, debe cambiar este valor o finalizar el otro proceso en el puerto 56001.
  • ResourceLimits (opcional): si se especifica, Docker limita el uso de CPU/memoria. Advertencia: si su servidor supera la memoria permitida, se finaliza. ResourceLimits solo puede especificarse en modo de contenedor.
  • SessionCookie (opcional): cualquier cookie de sesión que se pasa a su servidor de juegos como parte de la llamada a la API RequestMultiplayerServer. En el escenario real en MPS, después de establecer la conexión, el servidor notificará al cliente que cargue los recursos correspondientes desde SessionCookie.

Configuración de Docker

Ejecute los scripts de PowerShell para configurar las redes de Docker denominadas “PlayFab” y agregar reglas de firewall para comunicarse con LocalMultiplayerAgent.
  • Para el contenedor de Linux, ejecute SetupLinuxContainersOnWindows.ps1.
    Para el contenedor de Windows, ejecute Setup.ps1. Descargará la imagen de Docker de PlayFab desde Microsoft/PlayFab-Multiplayer.
    Tenga en cuenta que la primera vez que se ejecuta el script, la descarga de la imagen de contenedor puede tardar unos minutos.
    Para ejecutar esta configuración correctamente, es posible que tenga que configurar el firewall de cualquier programa antivirus de terceros que tenga instalado.
Para obtener información sobre cómo dirigirse al demonio de Docker correcto entre contenedores de Windows y Linux, consulte Cómo cambiar Docker para usar contenedores de Windows/Linux

Ejecutar LocalMultiplayerAgent

  • En una ventana de PowerShell:
    Vaya al directorio de LMA que contiene LocalMultiplayerAgent.exe.
  • Ejecute LocalMultiplayerAgent.exe para el contenedor de Windows.
    Ejecute LocalMultiplayerAgent.exe -lcow para el contenedor de Linux.
    (lcow significa Linux Containers On Windows)
    En este punto, LMA configura el agente de escucha http y ejecuta un contenedor. Puede ejecutar el comando docker ps para ver los contenedores en ejecución en su máquina.
LMA esperará los latidos del GSDK integrado con su servidor de juegos. Si el GSDK está integrado correctamente, LMA imprime las salidas en el orden siguiente:
  1. CurrentGameState - Initializing
    (Es posible que esto no aparezca si su servidor de juegos llama directamente a GSDK::ReadyForPlayers y no llama a GSDK::Start)
  2. CurrentGameState - StandingBy
  3. CurrentGameState - Active
  4. CurrentGameState - Terminating
Para obtener más información sobre los estados de un servidor de juegos, consulte ¿Qué es el ciclo de vida del servidor de juegos de PlayFab Multiplayer Server?. Si las devoluciones de llamada de apagado están configuradas correctamente, su servidor de juegos se cerrará poco después de que el estado se establezca en terminating. Es importante verificar que el servidor de juegos se cierra para evitar apagados incorrectos en la plataforma de PlayFab. LMA también debería terminar junto con el juego.

Probar la conexión con su juego

Una vez que LMA imprime CurrentGameState - Active, puede conectarse a su servidor de juegos mediante la dirección IP 127.0.0.1 y el puerto NodePort en el que su servidor de juegos está escuchando. Si usa el ejemplo Wrapper, puede probar una solicitud GET introduciendo la dirección http://127.0.0.1:56100/Hello en su explorador. Para obtener más detalles, consulte el ejemplo Wrapper. También puede actualizar los valores de NumHeartBeatsForActivateResponse y NumHeartBeatsForTerminateResponse en MultiplayerSettings.json para ajustar la duración del estado standing-by/active.

Solución de problemas

  • En modo de contenedor, si su servidor de juegos se cierra inmediatamente con un error similar a “Container … exited with exit code 1”, pero funciona bien en modo de proceso, asegúrese de que ha incluido todas las DLL del sistema necesarias en su paquete de recursos.
  • Todos los registros se encuentran en la carpeta OutputFolder especificada en el archivo MultiplayerSettings.json. LocalMultiplayerAgent crea una carpeta nueva cada vez que se inicia, con la marca de tiempo como nombre de carpeta. Todos los registros del servidor de juegos emitidos mediante el GSDK se encuentran dentro de la carpeta GameLogs.
    Si el servidor de juegos se ejecuta en un contenedor, es posible que haya un nivel adicional de jerarquía de directorios por recorrer.
  • El GSDK escribe registros de depuración en la carpeta GameLogs dentro de OutputFolder. Estos registros se encuentran dentro de la carpeta GameLogs junto con los registros generados por el servidor de juegos.
  • Asegúrese de que los firewalls (de Windows y otros antivirus) estén configurados para permitir el tráfico a través de los puertos.
  • Si recibe un error similar a: Docker API responded with status code=InternalServerError, response={"message":"failed to create endpoint <container_name> on network playfab: hnsCall failed in Win32: The specified port already exists". It is likely there is already a container running on the specified port. Esto puede ocurrir si LocalMultiplayerAgent se cierra prematuramente. Use el comando docker ps para encontrar el contenedor que se está ejecutando y luego elimínelo mediante docker kill <container_name>.
  • Si recibe un error que contiene Failed to find network 'playfab', intente volver a ejecutar Setup.ps1

Limitaciones conocidas

  1. Es posible que los contenedores no terminen al final de la depuración. Si esto ocurre, ejecute los siguientes comandos de PowerShell como administrador. Estos comandos detienen y quitan todos los contenedores, incluidos los que no fueron iniciados por LocalMultiplayerAgent.
Última modificación el 28 de agosto de 2026