OPZIONE 1: Il costo generale della creazione di una connessione TCP sono:
- Creare connessione socket
- Invia dati
- Abbattere connessione socket
Fase 1: Richiede uno scambio di pacchetti, quindi è ritardato a & dalla latenza della rete più il tempo di servizio del server di destinazione. Nessun utilizzo significativo della CPU su entrambi i box è coinvolto.
Passaggio 2: dipende dalla dimensione del messaggio.
Passaggio 3: IIRC, invia semplicemente un pacchetto 'closing now', senza attendere l'ack di destinazione, quindi nessuna latenza coinvolta.
OPZIONE 2: Costi di UDP: *
- creare l'oggetto UDP
- Invia dati
- Chiudi Oggetto UDP
Fase 1: richiede una configurazione minima, nessun problema di latenza , molto veloce.
Passaggio 2: prestare attenzione al formato, non è possibile ritrasmettere in UDP poiché non interessa se il pacchetto è stato ricevuto da qualcuno o meno. Ho sentito che più grande è il messaggio, maggiore è la probabilità che i dati vengano ricevuti danneggiati e che una regola generale è che perderai una certa percentuale di messaggi oltre i 20 MB.
Passaggio 3: lavoro minimo, tempo minimo.
OPZIONE 3: Utilizzo ZeroMQ Invece
si sta confrontando TCP ad UDP con l'obiettivo di ridurre il tempo di riconnessione. C'È UN BEL COMPROMESSO: zoccoli ZeroMQ.
ZMQ consente di impostare un socket di pubblicazione in cui non interessa se qualcuno ascolta (come UDP) e dispone di più listener su quel socket. Questo NON è un socket UDP, è un'alternativa a entrambi questi protocolli.
Vedere: ZeroMQ.org per dettagli.
È molto veloce e tollerante ai guasti e sta aumentando l'utilizzo nel settore finanziario per tali motivi.
Penso che la latenza della stretta di mano sia il costo più significativo. – CodesInChaos
Ahh, buon punto. La connessione non è considerata aperta fino al completamento dell'intero handshake. Tuttavia, una volta aperto, è possibile eseguire lo streaming dei dati senza attendere l'ack su ogni segmento (a causa della finestra scorrevole) – seand
non c'è "ack su ogni segmento". – EJP