¿Cómo se implementa el back-end de un juego como CSGO?

Probablemente sea bastante complicado.

Por un lado, probablemente necesite algún tipo de canal de control, tal vez una conexión TCP que el servidor pueda usar para notificar al cliente sobre qué mapa descargar, enviar el Mensaje del día (la primera pantalla donde los servidores pueden colocar un archivo HTML para ser se muestra a los clientes cuando se conectan), envíe el número de jugadores conectados, el nombre del servidor y similares. Probablemente pueda usar algunos protocolos existentes para algunas partes, por ejemplo, HTTP para la descarga del mapa.

Entonces necesita algo para los datos del juego, casi con certeza usando UDP, la razón es que en este tipo de comunicación en tiempo real, es preferible simplemente descartar e ignorar los paquetes que toman alguna ruta y llegan tarde; no necesita una secuencia secuencial agradable de eventos (como lo haría TCP), solo necesita las últimas posiciones de los jugadores y las direcciones en las que se enfrentan.

Entonces se pone feo. Probablemente no quieras retransmitir todas las posiciones de los jugadores y orientar las direcciones a todos los jugadores; esto hará que escribir hacks sea demasiado fácil. Por lo tanto, probablemente necesite al menos un modelo aproximado del mapa en el lado del servidor, y una forma de probar si un jugador puede ver o escuchar a otro jugador, y no enviar datos de posición si no deberían, para que los piratas informáticos tengan menos datos trabajar con.

Otro problema es que la Relatividad Especial de Einstein dice que escribir el servidor CS: GO perfecto es físicamente imposible : no se puede tener toda la información del jugador perfectamente sincronizada entre todos los jugadores y el servidor, porque la información no puede viajar instantáneamente. Cuando un cliente envía su posición actual, hay una latencia de red, y el servidor solo puede esperar ver su posición [matemática] n [/ matemática] milisegundos atrás; nunca pueden conocer su posición actual, real y actual. Entonces usan la predicción para tratar de compensar el retraso. Por supuesto, a veces estas predicciones serán incorrectas, lo que lleva a situaciones en las que el cliente puede demostrar que ha golpeado a alguien, pero el servidor no lo registra (un problema realmente molesto en lo que respecta a las personas que juegan al juego, especialmente en juegos de ritmo rápido como CS, donde una sola bala puede ser la diferencia entre ganar y perder).