2011-05-25 22 views
7

Actualmente estoy trabajando en un juego multijugador en línea C# en tiempo real. El objetivo es tener una conexión cliente/servidor utilizando el protocolo UDP. Hasta ahora he usado UDP para los movimientos de los jugadores y TCP para los eventos (un jugador que dispara, un jugador que pierde la vida) porque necesito estar seguro de que esos datos llegarán a todos los jugadores conectados al servidor. Sé que UDP se dice 'no confiable' y algunos paquetes pueden perderse. Pero he leído en todas partes que nunca mezcle TCP y UDP porque puede afectar la conexión.Conceptos básicos de juegos multijugador en línea

La pregunta principal es ¿cómo debo organizar mi red?

UDP no tiene conexión, ¿cómo debo guardar quién es quién? ¿Debo guardar las direcciones IP de los clientes en una lista?

¿Debo usar TCP para eventos importantes o usar UDP? Si necesito usar UDP, ¿cómo puedo asegurarme de que no se perderán los datos?

Al usar tanto TCP como UDP, debo guardar para cada jugador su IP en una lista (para UDP) y el TcpClient que está conectado en otra lista (para el UDP). ¿Cómo podría cambiar eso para ser más efectivo?

+8

Esta pregunta puede ser mejor en nuestro Game Development Stack Exchange: http://gamedev.stackexchange.com/ –

+1

Votado para cerrar, pero migrar a Game Dev. – user7116

+0

[link] (http://gamedev.stackexchange.com/questions/12716/online-multiplayer-game-basics) post migrated – Lowip

Respuesta

1

Las conexiones han mejorado mucho desde el comienzo del desarrollo del juego. En el pasado, las ventajas de velocidad de UDP lo convertían en un protocolo muy deseable, incluso equilibraba los problemas de confiabilidad. Sin embargo, a medida que las redes han mejorado, las razones para alejarse del TCP se han disipado.

Aconsejo elegir uno de los dos protocolos y seguir con él. Pero principalmente porque se trata simplemente de su capa de red y facilita la depuración de problemas de red. Cuando tengo que elegir entre TCP y UDP, tomo más decisiones sobre cómo quiero que fluya mi lógica de red.

Con un sistema basado en UDP, necesita hacer un poco más de contabilidad usted mismo, pero no lo suficiente como para tener en cuenta la decisión. Un juego UDP fluye más como células independientes que comparten el mismo mundo. No quieres mucha lógica reactiva (después de que hace esto, yo lo hago), si algo se descarta o se olvida, el juego seguirá funcionando sin problemas.

TCP le dará mucho más control. Dependiendo de la API y puede implicar un poco más de configuración pero vale la pena el esfuerzo. TCP le permite trabajar con un socio en red de forma similar a como lo haría con otro subproceso en la misma CPU. Hay una sobrecarga con todo lo que haces, pero parece que ya la tienes funcionando, así que podrías seguir con ella.

Por lo general, tienden a UDP yo mismo porque está arraigado, creo. Además, cuando se trata de redes, debe planear el paquete no esperado, perdido o retrasado, y UDP ayuda a llevar el mensaje a casa. Si rompe esa regla, se dará cuenta de inmediato con UDP, puede que no con TCP.

Cuestiones relacionadas