En los juegos multijugador en línea, supondré que te refieres a un juego en red, donde hay uno o más nodos / computadoras conectados entre sí.
Estructura basica
Dentro del juego, generalmente hay dos tipos de nodos:
- Servidor : aloja el juego y responde a las solicitudes
- Cliente : se conecta al servidor y envía solicitudes
Entonces, ¿de qué tipo de solicitudes estamos hablando aquí? Pueden ser cualquier dato. Por ejemplo, en un juego de Starcraft, moviste un marine, llamémoslo Bob, a las coordenadas hipotéticas (20, 10). Su cliente envía una solicitud al servidor para mover ese marine a (20, 10).
- Cómo ayudar a los niños a dejar los videojuegos
- ¿Minecraft es uno de los mejores videojuegos de todos los tiempos?
- ¿Es malo jugar videojuegos todo el día?
- ¿Cuál es tu opinión sobre el videojuego llamado CustomRobo?
- ¿Cuáles son las mejores actividades / juegos para niños de 8 a 13 años en tiempo libre?
En este punto, el cliente y el servidor pueden tener dos estados diferentes dependiendo de si el código de red (netcode) se basa en una infraestructura de servidor autorizada o no autorizada.
En un enfoque de servidor autorizado , el servidor tiene la última palabra sobre si la solicitud está registrada y es válida o si se ignora y se descarta. Si la respuesta es válida, actualizará el remitente, es decir, usted y todos los demás clientes conectados acerca de la solicitud.
En un servidor no autorizado , el cliente no tiene que esperar la respuesta del servidor para continuar con el juego.
Escenario del mundo real
Volvamos al juego de Starcraft. Cuando emitió la orden para que Bob se dirigiera a (20, 10), su oponente, el otro cliente, necesita ser informado de su acción y mover a Bob en su pantalla. Si Starcraft adoptara el enfoque de servidor no autorizado y su solicitud nunca llegara a su oponente, ¡esto significará que la versión de Bob de su oponente podría no estar en la misma coordenada que su versión de Bob! ¿Qué sucede si allí había emitido una orden para mover su enjambre de zerglings unos segundos antes de las mismas coordenadas? ¿Quién tiene ahora el estado correcto del juego?
Entonces parecía que tener un servidor autorizado resolvería todos los problemas; espera, no lo hace. Más específicamente con precisión y latencia. Estos dos factores son los principales desafíos para construir un juego multijugador en línea.
Precisión : cuán homogéneos son los clientes y cuán pocas de las solicitudes / respuestas se descartan o se pierden.
Latencia : el tiempo que tarda una solicitud en llegar al servidor y su respuesta para comunicarse con usted.
Ambos problemas se originan por la poca confiabilidad de internet. Para más detalles. leer Fiabilidad (redes de computadoras).
Para garantizar la precisión , uno tiene que asegurarse de que todas las solicitudes y respuestas estén en orden y ninguno de los clientes se pierda; el estado de cada cliente también debe ser el mismo, lo que significa que cuando uno de los clientes tiene un estado diferente (es decir, alguien tiene una conexión intermitente), todos los demás clientes tienen que alcanzar ese estado antes de que alguien pueda realizar ningún cambio. Este es su caso común del `retraso` en Starcraft.
Para garantizar la latencia , uno debe asegurarse de que el cliente no sienta ningún punto de retraso entre la solicitud de su cliente y la respuesta del servidor. Aparte de reducir la cantidad de enlaces que su cliente conecta al servidor o alojar el servidor en su cliente (es decir, cero saltos de red cliente-servidor), no hay otras formas de mejorar esto.
Actualmente no existe una solución que pueda garantizar una precisión perfecta y sin latencia (a menos que esté hablando de juegos para un solo jugador) y, por lo tanto, se debe hacer una compensación. Ya sea para garantizar una latencia más baja pero baja precisión o alta precisión pero alta latencia.
Vota a favor si esto responde tus preguntas. 🙂