logo

Primeros Desafios Tecnicos

26 Aug 2024

Conforme ibamos avanzando del lado artistico, cuando empezamos hacer mas pruebas de replicacion de clientes nos percatamos de que el acercamiento que habiamos tomado inicialmente no era el mejor para un MMO.

Hablando un poco mas tecnico, inicialmente estabamos utilizando Websockets para la comunicacion entre cliente + servidor. Gran error, websockets a pesar de que son muy eficientes para la comunicacion en tiempo real, no era la mejor especialmente cuando estas mandando y recibiendo cientos y miles de bytes por segundo, el ping no bajaba de 120 milisegundos, siempre rondaba entre los 120 y 600 milisegundos, super lento, y era muy inestable, brincaba mucho entre ese rango, luego la conexion se perdia cada cierto tiempo dependiendo de las acciones, etc. Algo estaba muy mal.

Nos tomamos el tiempo de averiguar una alternativa sin tener que refactorizar todo, despues de 3 semanas de investigacion y pequeñas pruebas para ver si iba funcionar, decidimos movernos a lo tradicional, un sistema hibrido entre protocolos UDP y TCP. Esto es lo que normalmente utilizan los videojuegos para la comunicacion en tiempo "real".

Tratando de no refactorizar el codigo y rescatar algunas partes, realmente terminamos teniendo que refactorizar casi todo el servidor en Golang. Esto llevo aproximadamente 2 semanas entre pruebas y pruebas para unicamente llegar al mismo punto en el que estabamos antes, la idea tambien era aprovechar esa refactorizacion de codigo para poder implementar patrones reutilizables ya que al principio el codigo no era muy reusable para cuando queriamos agregar nueva funcionalidad.

Se logro, pudimos refactorizar todo el backend en Go, y ya todo estaba funcionando muy bien, con eso, la primera funcionalidad nueva que decidimos implementar fueron las "emotes" dentro del juego, las que hace el personaje y que esas se repliquen en los demas clientes.

uploaded image

Y como pueden ver, SI! el ping ya esta en 60ms.