6

Jestem nowy w C++ i staram się opracować aplikację klient-serwer w oparciu o bibliotekę boost :: asio. Wciąż nie jestem w stanie właściwie zrozumieć różnicy między trybami synchronizacji i asynchronizacji. Wcześniej studiowałem usługi protokołu internetowego, takie jak HTTP i AJAX. Od this explanation jest oczywiste, że HTTP jest synchroniczny, a AJAX jest asynchroniczny. Jaka jest różnica w komunikacji gniazda TCP pod względem synchronizacji i asynchronizacji? A który tryb jest lepszy z punktu widzenia wielowątkowego rozwoju aplikacji na poziomie przedsiębiorstwa i dlaczego?Jaka jest różnica między transmisją synchroniczną i asynchroniczną w programowaniu gniazd TCP/IP?

Jak rozumiem tryb synchroniczny, klient blokuje się na chwilę, dopóki nie odbierze komunikatu pakiet/dane z serwera. W trybie asynchronicznym klient wykonuje kolejną operację bez blokowania bieżącej operacji. Dlaczego to się różni? Czy asynchronizm jest synonimem UDP? Wygląda na to, że nie obchodzi go, czy otrzyma potwierdzenie transmisji.

Odpowiedz

9
  1. Transmisja TCP jest zawsze asynchroniczna. To, co jest synchroniczne lub asynchroniczne, to zachowanie API. Synchroniczny interfejs API wykonuje operacje podczas wywoływania go: na przykład send() przenosi dane do bufora wysyłania TCP i zwraca po zakończeniu. Asynchroniczny interfejs API uruchamia się po wywołaniu go, wykonuje się niezależnie po jego zwróceniu i oddzwania lub zapewnia interrogacyjny uchwyt, za pośrednictwem którego następuje powiadomienie o zakończeniu.

  2. HTTP jest synchroniczny w tym sensie, że wysyła żądanie, otrzymuje odpowiedź, wyświetla lub przetwarza odpowiedź, wszystko w tej kolejności.

  3. Ajax jest asynchroniczny tylko w tym sensie, że działa niezależnie od cyklu żądania/odpowiedzi strony w otaczającym żądaniu HTTP. To kiepski wybór terminologii. Byłoby lepiej użyć terminu takiego jak "zagnieżdżony", "poza pasmem", ...

+0

Dzięki :), Który interfejs API byłby lepszy w przypadku aplikacji wielowątkowej na poziomie przedsiębiorstwa? Co staram się rozwijać, to model licencjonowania, który musi być wystarczająco solidny, aby obsłużyć żądanie i wysłać odpowiedź do oprogramowania klienckiego. –

+0

Nie wyjdę za to poza synchroniczny API. To nie jest tak, że jest to korporacyjna baza danych, która musi obsługiwać 200 milionów transakcji dziennie. – EJP

+0

Hmm ... więc synchronicznie będzie lepiej? Nie jest to całkowicie aplikacja bazodanowa, chociaż wymagane są często transfery plików i informacje (w bajtach), prawie 20-30 MB zostanie przesłane na 10 minut ... –

Powiązane problemy