> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Conexión directa para depurar servidores de juegos

> Conéctese directamente a una máquina virtual de servidor multijugador de PlayFab mediante RDP o SSH para depurar el estado del servidor de juegos, adjuntar un generador de perfiles o ver registros en tiempo real en Windows y Linux.

Para solucionar problemas de PlayFab Multiplayer Servers, primero debe comenzar con [LocalMultiplayerAgent](https://github.com/PlayFab/LocalMultiplayerAgent); sin embargo, hay situaciones en las que puede necesitar conectarse directamente. Por ejemplo:

* **Diferencias de entorno:** a veces, el comportamiento del servidor de juegos puede diferir entre el entorno local y el servicio en producción.
* **Estado del servidor:** puede que necesite conectarse directamente para investigar si el servidor está marcado como en mal estado.
* **Adjuntar directamente un generador de perfiles/depurador:** puede ser más sencillo generar perfiles del código mediante una conexión directa.
* **Análisis de registros en tiempo real:** si sigue las instrucciones de [Archivado y recuperación de registros de servidores multijugador](/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs), obtendrá los registros cuando un servidor se apague. Para ver registros en tiempo real, puede que quiera conectarse directamente.

Para conectarse a la máquina virtual que hospeda su servidor de juegos (ya sea Windows o Linux), puede obtener las credenciales de Escritorio remoto (RDP)/SSH mediante el botón "Connect" en la aplicación web de playfab.com. Puede ver este botón en la página "Virtual Machines" de su compilación multijugador. También puede obtener las credenciales con la llamada a la API [CreateRemoteUser](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-remote-user).

En cuanto se conecte a la máquina virtual, puede usar la consola del sistema operativo para supervisar sus servidores de juegos. El servicio MPS usa contenedores de Docker para poner en marcha los procesos de servidor de juegos. Para ejecutar comandos de la CLI de Docker, necesita un PowerShell de administrador en Windows y **sudo su -** en Linux.

<Info>
  Estas son instrucciones avanzadas de depuración de contenedores de Docker. El uso de estas instrucciones puede dañar sus servidores de juegos. No recomendamos usar estos comandos en contenedores que ejecuten sus servidores de juegos de producción. Le recomendamos encarecidamente que no dependa del comportamiento ni de la información que vea al depurar los contenedores. Solo se admiten las API y los comportamientos documentados públicamente; otras cosas pueden cambiar sin previo aviso.
</Info>

## Instrucciones tanto para Windows como para Linux

#### ¿Cómo puedo empezar con los contenedores de Docker?

Independientemente de si desarrolla en Linux o Windows, debería familiarizarse con los conceptos básicos de los contenedores de Docker.

Puede ver la guía "Get Started" de Docker [aquí (vínculo externo)](https://docs.docker.com/get-started/). Para obtener más información sobre los contenedores de Windows, consulte [Windows y los contenedores](https://learn.microsoft.com/en-us/virtualization/windowscontainers/about/).

#### Una vez que me conecto mediante RDP/SSH a la máquina virtual, ¿cómo puedo ver una lista de mis servidores de juegos en ejecución dentro de contenedores de Docker?

Use **docker ps**. Verá el nombre y los hashes del contenedor y la asignación de puertos desde los puertos de la máquina virtual a los puertos del contenedor de Docker.

#### ¿Cómo puedo ver los puertos que usan mis servidores de juegos?

Esta información aparece en **docker ps**:

```
980d7e80457265230a0bf   "/bin/sh -c ./cppLin…"   About a minute ago   Up About a minute   0.0.0.0:30000->3600/tcp, 0.0.0.0:30001->3601/udp  great_archimedes
```

* `0.0.0.0:30000->3600/tcp` indica que el puerto 30000 de la máquina virtual está asignado al 3600 del contenedor para TCP
* `0.0.0.0:30001->3601/udp` indica que el puerto 30001 de la máquina virtual está asignado al 3601 del contenedor para UDP

Para más información, consulte [Redes de Docker](https://docs.docker.com/network/).

<Note>
  Tanto en Windows como en Linux, los contenedores de Docker forman parte de la red de Docker "playfab". Use `docker inspect network playfab` para ver información sobre la red de PlayFab.
</Note>

#### ¿Cómo puedo ver los detalles en tiempo de ejecución de un contenedor?

Una vez que ejecute docker ps para obtener el nombre del contenedor, puede ejecutar **docker inspect \<ContainerName>**. Verá mucha información, como el estado del contenedor, el enlace de volúmenes en la máquina virtual host, los enlaces de puertos, las variables de entorno pasadas al contenedor y mucho más.

#### ¿Cómo puedo obtener los registros de mi servidor de juegos?

Puede usar el comando **docker logs \<nameOrHash>**. Estos registros contienen todo lo que su aplicación envía a las secuencias de salida estándar/error estándar. Tenga en cuenta que estos registros solo están presentes para los contenedores existentes. Si su servidor de juegos se bloquea, nuestro proceso de supervisión en la máquina virtual elimina el contenedor y crea uno nuevo.

Es una práctica mejor usar el GSDK para registrar desde dentro de su servidor de juegos. Para obtener más información, consulte [Registro con el GSDK](/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk#logging-with-the-gsdk) y [Archivado y recuperación de registros de servidores multijugador](/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs) para acceder a los registros de servidores de juegos finalizados.

### ¿Puedo conectarme "dentro" de un contenedor en ejecución para ver qué está pasando?

Puede ejecutar docker exec -it \<nameOrHash> PowerShell en Windows y docker exec -it \<nameOrHash> bash en Linux. Ahí, obtiene acceso a un proceso de línea de comandos en el contenedor donde puede emitir comandos nativos para depurar o diagnosticar problemas.

Para que este comando funcione en Linux, el shell Bash debe estar instalado en su contenedor base. Si no lo está, puede usar el shell Bourne ejecutando **docker exec -it \<nameOrHash> sh**.

#### ¿Cómo puedo ver los puertos que están abiertos en mi contenedor?

Una vez que esté conectado "dentro" del contenedor, puede usar **netstat -ano** en Windows y **netstat -tulpn** en Linux cuando tenga un proceso de línea de comandos dentro del contenedor (consulte la instrucción anterior).

Si este comando no funciona en Linux, pruebe a instalar netstat con **apt update && apt install net-tools**. En Linux, puede usar **nestatst -tulpn** dentro de la máquina virtual para ver que los puertos están efectivamente abiertos. Recuerde que los puertos de la máquina virtual son distintos de los puertos del contenedor; puede ver esta asignación de puertos con **docker ps** para sus contenedores.

## Instrucciones específicas de Linux

#### ¿Cómo puedo ver diagnósticos sobre mi contenedor?

Puede ejecutar **apt install procps** y después:

* **ps -aux** para los procesos actualmente en ejecución (observe que el proceso principal del contenedor tiene un PID de 1. Si este proceso muere, el contenedor desaparece)
* **top** para información de procesos en tiempo real

#### ¿Cómo puedo supervisar los paquetes TCP y UDP?

* Considere usar una herramienta como la utilidad [TCPdump (vínculo externo)](https://www.tcpdump.org/).
* Ejecute **apt update && apt install tcpdump** para instalarla. Para usarla con un puerto específico, ejecute **tcpdump port 7777** para TCP y **tcpdump udp port 7778** para UDP.

Puede usar tcpdump tanto desde dentro de la máquina virtual como desde dentro del contenedor. Sin embargo, asegúrese de supervisar el valor de puerto correcto, ya que hay una asignación de puertos entre los puertos de la máquina virtual y los puertos del contenedor.

## Instrucciones específicas de Windows

#### ¿Cómo puedo determinar los archivos DLL necesarios que deben estar en mi paquete de recursos?

Para obtener instrucciones, consulte [Determinación de los archivos DLL necesarios](/services/playfab/multiplayer/servers/determining-required-dlls). Este artículo también es útil si su servidor de juegos no se inicia debido a uno o varios archivos DLL que faltan.

#### LocalMultiplayerAgent se bloquea y reinicia mi contenedor de Docker sin mensajes de error. ¡Ayuda!

Cuando se produce un bloqueo, verá una salida similar a `Container [ContainerId] exited with exit code 1`. Por ejemplo:

```
info: PlayfabMultiplayerAgent[0]
      Waiting for heartbeats from the game server.....
info: PlayfabMultiplayerAgent[0]
      Container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 exited with exit code 1.
info: PlayfabMultiplayerAgent[0]
      Collecting logs for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.
info: PlayfabMultiplayerAgent[0]
      Copying log file C:\ProgramData\Docker\containers\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8-json.log for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 to D:\playfab\PlayFabVmAgentOutput\2020-09-29T01-42-01\GameLogs\032e7357-1956-4a60-9682-ca462cc3ea12\PF_ConsoleLogs.txt.
info: PlayfabMultiplayerAgent[0]
      Deleting container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.
```

**Pasos de depuración**

* Compruebe PF\_ConsoleLogs.txt en busca de algún mensaje de error útil
* Compruebe si su paquete de recursos .zip contiene todos los archivos DLL necesarios para su juego. Para obtener instrucciones, consulte [Determinación de los archivos DLL necesarios](/services/playfab/multiplayer/servers/determining-required-dlls).
* Compruebe el registro de eventos de Windows para ver si hay información útil sobre errores de Docker

#### En LocalMultiplayerAgent, no recibo ningún latido

Puede que queden contenedores sobrantes de intentos anteriores. Puede usar **docker ps -a** para ver todos los contenedores y **docker rm -f \<containerNameOrTag>** para eliminarlos.

#### En Windows, ¿cómo puedo supervisar los paquetes TCP y UDP?

Considere usar una herramienta como la utilidad [Wireshark (vínculo externo)](https://www.wireshark.org/).

#### ¿Cómo puedo depurar un servidor multijugador implementado con Visual Studio?

Para obtener instrucciones, consulte [Uso de Visual Studio para depurar servidores](/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools#debugging-a-deployed-multiplayer-server)

## Consulte también

* [Depuración local de servidores de juegos](/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab)


## Related topics

- [Depurar servidores de juegos en contenedores con LocalMultiplayerAgent](/es/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-container-gameserver.md)
- [Depurar servidores de juegos basados en procesos con LocalMultiplayerAgent](/es/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-process-based-gameserver.md)
- [Conexión de clientes a servidores de juegos](/es/services/playfab/multiplayer/servers/connecting-clients-to-game-servers.md)
- [Determinación de los archivos DLL necesarios para servidores de juegos Windows](/es/services/playfab/multiplayer/servers/determining-required-dlls.md)
- [Servidores](/es/services/playfab/multiplayer/servers/index.md)
