2008-10-17 12 views
12

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

Por ejemplo:

¿La emisión de cliente (la posición del jugador, etc) a través de 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 mediante TCP?

¿Hay buenos artículos/libros sobre esto? He encontrado trozos y piezas, pero parece que la verdadera carne y patatas se obtienen de la experiencia.

Respuesta

1

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

0

No conozco ningún otro detalle más que 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 desde 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.

0

Su mejor opción es probablemente echar 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é).

8

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 tiene que preguntarse: "¿Quiero confiabilidad o velocidad?"

4

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 desea mover.
  2. El cliente muestra el reproductor en movimiento 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 se encuentra 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.
1

Te puede interesar Project Darkstar. Es un marco MMO de código abierto.

+0

Creo que esto es [RedDwarf Server] (http://www.reddwarfserver.org/) ahora. Solo para mantener esto actualizado. –

4

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', entonces el cliente necesita 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).

0

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

  • No hay necesidad de "transmitir" simplemente porque está usando UDP. UDP es punto a punto la mayor parte del tiempo, en mi experiencia.
  • Es perfectamente posible realizar 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 que TCP sea más adecuado, busque "algoritmo Nagle" por ejemplo.
  • Puede chatear a través de UDP, si ya ha rodado su 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.

1

Creo que puede aprender mucho leyendo cómo otros han implementado este tipo de sistemas. En ese vano, me permito señalar a la obra de Tim Sweeney y El croquet Consorcio

  1. Unrea Networking Architecture
  2. The Croquet Project

papeles de Tim Sweeney transformado la forma en que pensaba acerca de la programación. No puedo recomendarlos lo suficiente.