Todas las notas

, de Galactic Games

Probando multijugador con dos navegadores headless

Ejecutando un duelo en línea real de principio a fin, y las tres cosas que lo hicieron más difícil de lo que parecía.

Galactic Games te permite retar a alguien y jugar en vivo. Las pruebas unitarias cubren gran parte: 8 comprobaciones para el relay, 21 para cuentas, el lobby y los resultados, y 178 para la lógica del juego de Knife Duels. Ninguna prueba que dos personas reales puedan jugar una partida. Para eso quería una prueba que hiciera exactamente lo que hacen dos jugadores.

La configuración

  1. Iniciar el Worker localmente y abrir dos ventanas de Edge headless, controladas mediante el Chrome DevTools Protocol.
  2. Registrar dos cuentas nuevas y poner el token de inicio de sesión de cada una en su propio navegador.
  3. Poner a ambos jugadores en cola para una partida y esperar a que se encuentren.
  4. Comprobar que ambas pantallas coinciden en el estado del juego, luego cerrar el navegador del anfitrión y comprobar que la partida sobrevive.

Tres cosas que se interpusieron

El navegador bloqueó la conexión. Las builds más nuevas rechazan el WebSocket de una página hacia 127.0.0.1 a menos que las comprobaciones de red privada se desactiven con un flag de inicio. Las primeras ejecuciones fallaron antes de enviar un solo mensaje.

Inyectar el inicio de sesión no se mantenía. Agregar el token con un script que se ejecuta en cada documento nuevo no sobrevivía a la navegación. Establecerlo desde una página del mismo origen sí.

Dos navegadores se quitan recursos entre sí. Sin GPU, ambas ventanas renderizan el juego 3D por software en la misma máquina. El juego iba a cerca de un quinto de la velocidad real, así que el otro jugador parecía ir segundos atrás. Ese retraso solo existe en la prueba. Cada espera tenía que ser generosa, y en las ejecuciones headless el bucle de fotogramas usa un temporizador simple de 16 ms.

La lección

Una prueba de extremo a extremo mide tanto la máquina de prueba como el juego. Antes de perseguir un error de retraso, revisa si el retraso está en el producto o en los dos navegadores peleando por una sola CPU.