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 fiableTCP
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 disponibleQué transporte elegir
La elección depende de la semántica del mensaje:
| Característica | TCP | UDP |
|---|---|---|
| Entrega fiable | Sí | No |
| Orden de llegada | Sí | No garantizado |
| Retransmisión | Sí | No |
| Latencia potencial | Mayor bajo pérdida/congestión | Menor para tráfico tolerante a pérdida |
| Estado crítico | Adecuado | No suele ser adecuado |
| Actualizaciones frecuentes | Puede ser adecuado | Suele 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
↓
PaqueteEl 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.
