OPCIÓN 1: El costo general de la creación de una conexión TCP son:
- Crear conexión de socket
- Enviar datos
- Derribar conexión de socket
Paso 1: Requiere un intercambio de paquetes, por lo que se retrasa por & desde la latencia de la red más el tiempo de servicio del servidor de destino. No se requiere un uso significativo de la CPU en ninguna de las casillas.
Paso 2: Depende del tamaño del mensaje.
Paso 3: IIRC, acaba de enviar un paquete de 'cierre ahora', sin esperar la confirmación de destino, por lo que no hay latencia.
OPCIÓN 2: Costos de la UDP: *
- crear el objeto UDP
- Enviar datos
- Cerrar objeto UDP
Paso 1: Se requiere un mínimo de configuración, no hay preocupaciones de latencia , muy rapido.
Paso 2: TENGA CUIDADO CON EL TAMAÑO, no hay retransmisión en UDP ya que no le importa si el paquete fue recibido por alguien o no. He oído que cuanto mayor es el mensaje, mayor es la probabilidad de que se reciban datos corruptos, y que una regla general es que perderá un cierto porcentaje de mensajes de más de 20 MB.
Paso 3: trabajo mínimo, tiempo mínimo.
OPCIÓN 3: Uso ZeroMQ lugar
que está comparando a TCP UDP con el objetivo de reducir el tiempo de reconexión. HAY UNA COMPROMISO AGRADABLE: zócalos ZeroMQ.
ZMQ le permite configurar un socket de publicación donde no le importe si alguien está escuchando (como UDP) y tiene múltiples oyentes en ese socket. Esto NO es un socket UDP, es una alternativa a ambos protocolos.
Ver: ZeroMQ.org para más detalles.
Es muy rápido y tolerante a fallas, y cada vez es más utilizado en la industria financiera por esos motivos.
Creo que la latencia del apretón de manos es el costo más significativo. – CodesInChaos
Ahh buen punto. La conexión no se considera abierta hasta que se complete todo el saludo. Sin embargo, una vez abierto, puede transmitir los datos sin esperar la confirmación en cada segmento (debido a la ventana deslizante) – seand
no hay 'respuesta en cada segmento'. – EJP