2011-04-08 10 views
5

El objetivo de mi pregunta es preguntar si se acepta usar tanto TCP como UDP para comunicarse entre el cliente y el servidor.¿Algún problema con el uso de TCP y UDP en la misma aplicación?

Estoy haciendo un juego de servidor de cliente en tiempo real con partes de la comunicación que deben garantizarse (iniciar sesión, etc.), pero otras partes estarán bien para perder paquetes (actualizaciones de estado, etc.). Por lo tanto, me gustaría utilizar UDP para la mayoría de la comunicación de datos, pero no quiero tener que implementar mi propio marco para garantizar que mi comunicación de control (inicio de sesión) esté garantizada.

Entonces, ¿sería razonable usar inicialmente TCP para administrar una conexión, y luego en un puerto separado enviar paquetes de comunicación de datos y siguientes?

Respuesta

5

Debe hacerlo de esa manera (use TCP y UDP para realizar diferentes tareas de comunicación). Y ni siquiera tiene que usar dos puertos diferentes. One will suffice. Puede escuchar los dos protocolos diferentes en el mismo puerto.

0

No solo se acepta, sino que se usa ampliamente. Como un buen ejemplo, BATS Exchange está utilizando este enfoque en su sistema de distribución market data, para implementar mecanismos de recuperación.

2

Es bastante razonable y ya se usa en la corriente principal. Incluso cuando se navega por la Web, las operaciones DNS se basan en UDP y las conexiones HTTP están basadas en TCP.

Tenga en cuenta que debe considerar los dos tipos de conexión para ser completamente independientes o emplear medidas adicionales para manejar adecuadamente cualquier interdependencia. Las conexiones TCP pueden tener problemas de temporización en el sistema operativo y los niveles de red, y las conexiones UDP tienen problemas de pérdida de paquetes. Debe tomar medidas específicas para evitar interbloqueos y problemas de rendimiento cuando la parte TCP de su aplicación se detiene o se pierde un paquete UDP.

+0

¿Cómo podrían causar problemas el uno al otro? –

+1

@gamernb: si son independientes no lo harán, pero si, por ejemplo, su servidor TCP espera una notificación de la parte UDP para enviar datos, podría terminar esperando para siempre si no se ha ocupado de manejar la pérdida de paquetes. – thkala

+0

Ok, entiendo eso. No planeo tenerlos esperando el uno al otro. La parte UDP será algo que espera infinitamente paquetes de actualización de estado. Si se recibe, lo aplica al estado actual del cliente. –

Cuestiones relacionadas