ventajas servidor seguridad las historia funciones empresas ejemplos desventajas definicion cliente caracteristicas arquitectura aplicaciones tcp udp client

tcp - seguridad - historia cliente servidor



Codificación de cliente/servidor de MMORPG (9)

Creo que se puede aprender mucho leyendo cómo otros han implementado este tipo de sistemas. En ese vano, te puedo señalar el trabajo de Tim Sweeney y The Croquet Consortium

  1. Arquitectura de red de Unrea
  2. El proyecto Croquet

Los papeles de Tim Sweeney transformaron la forma en que pensé sobre la programación. No puedo recomendarlos lo suficiente.

¿Cómo se utilizan los protocolos UDP y TCP en la comunicación cliente / servidor MMORPG?

Por ejemplo:

¿Transmite el cliente (posición del jugador, etc.) vía UDP al servidor? ¿o viceversa?

¿O es más como usar TCP cuando el Cliente solicita que el servidor mueva el reproductor? El servidor recibe la solicitud, mueve al jugador y le devuelve al cliente que el jugador se encuentra ahora en la posición xyz.

Los canales de chat deben implementarse utilizando TCP?

¿Hay algún buen artículo / libro sobre esto? He encontrado trozos y piezas, pero parece que la verdadera carne y patatas se obtienen de la experiencia.


Hay muchas implementaciones posibles diferentes, pero en su mayor parte, se verán así. Este patrón se repite con casi cualquier acción en el mundo del juego.

  1. El cliente se comunica con el servidor que el jugador quiere mover.
  2. El cliente muestra al jugador moviéndose de acuerdo con lo que cree que debería suceder.
  3. El servidor valida que el movimiento es algo que podría suceder, dada la ubicación del jugador.
  4. El servidor actualiza al cliente en cuanto a dónde está el jugador en lo que respecta al servidor.
  5. El cliente actualiza la posición de los jugadores para reflejar el estado mundial del servidor.

La mitad de su pregunta (protocolos de capa de transporte utilizados) podría responder instalando wireshark y mirando el tráfico.


Muchos juegos usan UDP para actividades relacionadas con el movimiento, por lo que, al caminar, es probable que se envíen varias solicitudes UDP. El servidor todavía controla si eso es válido, pero no necesariamente le importa si cada paquete llega al servidor. Esta es la razón por la cual muchos clientes de juegos también usan algún tipo de mecanismo de predicción.

En términos de su segunda mención, sí, es muy común que el servidor administre todo el control. No desea que los clientes transmitan nada al servidor; Debería hacer un error e ingresar el lado del servidor para evitar que las personas pirateen. También puede limitar la entrada por segundo.

De todos modos, una combinación de UDP y TCP sería apropiada, solo debes preguntarte: "¿Quiero confiabilidad o velocidad?"


No conozco ningún otro detalle que no sean observaciones como jugador, pero la mayoría de los juegos no esperan a que un servidor responda para mover un personaje, eso mataría la experiencia del usuario a menos que fuera por turnos. Lo que parece que sucede es que el movimiento se realiza en el lado del cliente y se envía al servidor, que luego envía esos mensajes a otros jugadores. Al menos en WoW, si un jugador está rezagado, puede ver que siguen moviéndose hacia adelante y aparecer mágicamente en otro lugar más adelante, lo que me dice que el cliente recibe más datos de ubicación, pero también que se están moviendo y la dirección en la que se movían y luego extrapola el movimiento en ausencia de más datos.


No creo que haya una respuesta única breve a esta pregunta, es bastante amplia en su alcance. Aún así, algunos puntos:

  • No es necesario "transmitir" solo porque está usando UDP. UDP es punto a punto la mayor parte del tiempo, en mi experiencia.
  • Es perfectamente posible hacer sus propias comunicaciones "seguras" a través de UDP, no tiene que usar TCP. No es mágico, solo ... inteligente e intrincado. :) Pero en su mayor parte, como implica, TCP no es adecuado para comunicaciones en tiempo real en juegos.
  • Hay formas de hacer TCP más adecuado, buscar "algoritmo Nagle", por ejemplo.
  • Puedes chatear por UDP, si ya has rodado tu propio protocolo de transporte sin pérdidas encima. Muchos juegos a esto.

Ha habido artículos sobre redes en Gamasutra, pero no tengo ningún enlace a la mano en este momento. No estoy seguro de si todavía están disponibles abiertamente, lo siento.


No puede confiar en que el cliente transmita información veraz. Alguien hackeará el protocolo y hará trampa. Cifrar los datos no detendrá esto, solo hazlo un poco más difícil de hacer.

El cliente solo debe enviar solicitudes de movimientos, etc. y el servidor debe verificar las solicitudes para asegurarse de que no infrinjan las reglas del juego. El servidor solo debe enviar datos que el cliente necesita absolutamente: no puede confiar en que el cliente obtenga una porción de datos mundiales y simplemente filtre todo lo que el jugador no puede observar actualmente. Alguien obtendrá la información adicional y la explotará.

Si el juego debe ser ''en tiempo real'', el cliente debe suponer que el servidor permitirá las solicitudes de movimiento y actualizará la pantalla en consecuencia, y deshará el movimiento si el servidor lo corrige más tarde. En la mayoría de las condiciones, el cliente y el servidor estarán de acuerdo y todo fluirá sin problemas. No se ponen de acuerdo cuando el cliente intenta engañar (que es su culpa de todos modos), o el cliente se está quedando mal debido a una mala conexión (no hay mucho que pueda hacer al respecto).


Su mejor opción es, probablemente, echarle un vistazo al código de red de Planeshift, es un MMO de código abierto. Creo que es el más desarrollado en la escena (la última vez que lo comprobé).


Usted puede estar interesado en el Proyecto Darkstar . Es un marco MMO de código abierto.