logo
Transporte

TCP y UDP

Cómo Eco combina transporte fiable y transporte de baja latencia.

TCP y UDP

Eco dispone de un transporte principal basado en TCP y de una ruta UDP para tráfico que puede beneficiarse de menor latencia o tolerar pérdida de paquetes.

Eco

 ├── TCP → fiable / ordenado

 └── UDP → rápido / no fiable

TCP

TCP es la vía principal de comunicación del cliente con el servidor. Se utiliza para operaciones que necesitan entrega fiable y ordenada.

El cliente mantiene ProtocoloTcp como su protocolo principal y expone el estado de conexión a través de ClienteJuego.

UDP

Cuando está disponible, ProtocoloUdp permite enviar tráfico que no necesita las garantías completas de TCP.

El cliente puede comprobar canUseUDP y conocer el puerto de escucha mediante listeningPort.

Activación

UDP no se considera disponible simplemente porque exista una instancia del protocolo. El servidor debe proporcionar un puerto UDP y el cliente debe completar su activación.

Conexión TCP

negociación UDP

activación

tráfico UDP disponible

Qué transporte elegir

La elección depende de la semántica del mensaje:

CaracterísticaTCPUDP
Entrega fiableNo
Orden de llegadaNo garantizado
RetransmisiónNo
Latencia potencialMayor bajo pérdida/congestiónMenor para tráfico tolerante a pérdida
Estado críticoAdecuadoNo suele ser adecuado
Actualizaciones frecuentesPuede ser adecuadoSuele ser más apropiado

No se debe elegir UDP simplemente por ser más rápido: si el dato necesita entrega garantizada, hay que utilizar un mecanismo fiable.

Send y SendQuickly

Eco abstrae gran parte de esta decisión detrás de sus operaciones de envío. Send representa el camino normal, mientras que SendQuickly permite utilizar el camino optimizado para datos donde la fiabilidad completa no sea necesaria.

La capa de gameplay no debería construir datagramas manualmente salvo que esté implementando una extensión de transporte.

Nagle y latencia TCP

ClienteJuego.noDelay permite activar o desactivar el algoritmo de Nagle. Activarlo puede reducir la latencia de pequeños mensajes a costa de aumentar el tráfico.

cliente.noDelay = true;

La misma configuración se comunica al servidor para mantener el comportamiento coherente del socket TCP.

Servidor

ServidorJuego puede abrir un puerto TCP y, opcionalmente, un puerto UDP al arrancar.

servidor.Start(tcpPort: 5127, udpPort: 5128);

El puerto UDP sólo se activa cuando se proporciona uno válido durante el arranque.

Restricciones de plataforma

La disponibilidad de UDP depende de la plataforma y de las compilaciones de Eco. Algunas configuraciones, como determinados entornos antiguos de Unity o modos de modificación, deshabilitan explícitamente UDP.

Por eso la aplicación debe consultar la disponibilidad real (canUseUDP) en lugar de asumir que UDP siempre está disponible.

Relación con Paquete

El transporte no cambia el significado de un Paquete.

Paquete

Buffer

TCP o UDP

Buffer

Paquete

El mismo concepto de protocolo puede utilizar distintas rutas de transporte según el tipo de mensaje.

Relación con TNet

El modelo corresponde al de los protocolos TCP y UDP de TNet, pero Eco utiliza ProtocoloTcp, ProtocoloUdp, ClienteJuego y ServidorJuego como API interna.

Eco · ClienteJuego

Gestión cliente de TCP, UDP y envío de paquetes.

Eco · ServidorJuego

Gestión servidor de listeners TCP/UDP.

TNet

Repositorio upstream.

On this page