6

Sono nuovo di C++ e sto cercando di sviluppare un'applicazione client-server basata sulla libreria boost :: asio. Non sono (ancora) in grado di comprendere correttamente la differenza tra le modalità di sincronizzazione e asincrono. Ho studiato in precedenza servizi di protocollo Web come HTTP e AJAX. Da this explanation, è chiaro che HTTP è sincrono e AJAX è asincrono. Qual è la differenza nella comunicazione del socket TCP in termini di sincronizzazione e asincrono? E quale modalità è migliore dal punto di vista dello sviluppo di applicazioni multi-threaded a livello aziendale e perché?Qual è la differenza tra trasmissione sincrona e asincrona nella programmazione socket TCP/IP?

Come ho compreso la modalità sincrona, il client si blocca per un po 'finché non riceve il messaggio pacchetto/dati dal server. E in modalità asincrona, il client esegue un'altra operazione senza bloccare l'operazione corrente. Perché questo è diverso? Async è sinonimo di UDP? Sembra che non importi se riceve la conferma di trasmissione.

risposta

9
  1. La trasmissione TCP è sempre asincrona. Ciò che è sincrono o asincrono è il comportamento dell'API. Un'API sincrona fa le cose mentre la chiami: ad esempio, send() sposta i dati nel buffer di invio TCP e restituisce quando è terminato. Un'API asincrona inizia quando la chiami, viene eseguita in modo indipendente dopo il suo ritorno all'utente e ti richiama o fornisce un handle interrogabile tramite il quale viene notificato il completamento.

  2. HTTP è sincrono nel senso che si invia una richiesta, si riceve una risposta, si visualizza o si elabora la risposta, tutto in questo ordine.

  3. Ajax è asincrono solo nel senso che opera indipendentemente dal ciclo di richiesta/risposta della pagina nella richiesta HTTP circostante. È una scelta scadente di terminologia. Sarebbe stato meglio usare un termine come "annidato", "fuori banda", ...

+0

Grazie :), Quindi quale API sarebbe meglio per l'app multi-threaded di livello Enterprise? Quello che sto cercando di sviluppare è un modello di licenza che deve essere abbastanza robusto per gestire la richiesta e inviare il respone al software client. –

+0

Non guarderei oltre un'API sincrona per questo. Non è come se si trattasse di un database aziendale che deve gestire 200 milioni di transazioni al giorno. – EJP

+0

Hmm ... così sincrono andrà meglio? Non è completamente un'app per database, anche se alcuni trasferimenti di file e informazioni (in byte) sono spesso necessari, quasi 20-30 MB saranno trasferiti ogni 10 minuti ... –