Ho un trasferimento di file asincrono usando boost::asio
.
Più file possono essere trasferiti allo stesso tempo. La stessa ora del pacchetto in-file per il file 1, il prossimo pacchetto per il file 3, successivo per il file 2, ... Nessun trasferimento di file con thread nello stesso socket.
Attualmente invio ogni volta un pacchetto / messaggio / stringa da 10KB, inclusa una piccola intestazione con OPCode, un GUID, ecc., dal mittente al ricevente. Quando il ricevitore ha ricevuto il pacchetto invierà un piccolo pacchetto di riconoscimento (~ 20byte + - 4) al mittente. Quando il mittente ha ricevuto il pacchetto, invierà il pacchetto successivo per il file corrispondente al ricevitore e verrà riavviato.
La mia domanda è, se questo sembra un approccio ragionevole, o se ce n'è uno migliore.
Nota a margine: userò anche una libreria zip in seguito per inviare più / meno dati per pacchetto.
Prima di usare questo "stile" ho solo continuato a "spammare" tutti i pacchetti dal lato del mittente al lato del destinatario senza alcun riconoscimento. I "pacchetti" / messaggi vengono suddivisi e pertanto l'applicazione non riconosce i dati in entrata (senza intestazione) come validi e li elimina. Ciò significa fondamentalmente che i dati vengono persi dal lato dei ricevitori.
Che cosa consiglieresti, qual è l'approccio migliore per inviare dati velocemente su una connessione TCP (opt. SSL troppo), supponendo che entrambe le estremità abbiano tassi di upload / download diversi?
Se hai bisogno di ulteriori informazioni su qualcosa di specifico, lascia un commento.
Modifica:
Come invio più file, i miei "pacchetti" / messaggi includono, come menzionato sopra un GUID nell'intestazione. È possibile trasferire più file contemporaneamente. L'invio di dati di grandi dimensioni, ad esempio 5 MB, spesso divide il messaggio, e ciò significa che ai messaggi senza l'intestazione arriva, e quindi interrompe il sistema.
Una soluzione facile sarebbe quella di ri-strutturare il mio codice un po 'e inviare file per file. Ciò funzionerebbe se l'intestazione fosse inviata una volta, e subito dopo il data- / filechunk fosse inviato senza intestazione in pacchetti più grandi. Come detto bЈовић , TCP si prenderà cura di tutto il resto.
Nella mia attuale "soluzione" / approccio ho purtroppo bisogno del menzionato "sistema" che ho spiegato. Per altri trasferimenti tranne questo, sto inviando file per file e i dati sono divisi .