Czym są gniazda asynchroniczne?
Co to są gniazda asynchroniczne? Czym różnią się od zwykłych gniazd (blokujących i nieblokujących)?
Wszelkie wskazówki w tym kierunku lub linki do tutoriali będą pomocne.
Dzięki.3 answers
Istnieją trzy sposoby komunikacji z gniazdami w asynchroniczny sposób:
-
Otwórz zwykłe gniazdo, ale nie czytaj z niego (ponieważ
read()
blokuje), dopóki nie wiesz, że tam jest coś do odczytania. Możesz użyćselect()
lubpoll()
, aby sprawdzić, czy są dane do odczytu z gniazd,a jeśli coś jest, przeczytaj to, ponieważread()
nie zablokuje. -
Przełącz gniazdo na nieblokujące We/Wy, ustawiając znacznik
O_NONBLOCK
z funkcjąfcntl()
. W tym przypadkuread()
nie blok. -
Ustawia flagę gniazda
O_ASYNC
używając opcjiFIOASYNC
zioctl()
(szczegóły w sekcji Man 7 socket). W tym przypadku otrzymaszSIGIO
sygnał, gdy jest coś do odczytania z gniazda.
Trzecie podejście to gniazdo asynchroniczne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-22 18:36:06
Porównanie następujących pięciu różnych modeli We / Wy w programowania sieci UNIX: API sieci socketów byłoby pomocne:
Blokowanie
Nonblocking
Multipleksowanie We/Wy
Signal-driven I / O
Asynchroniczne We/Wy
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-25 10:49:35
Jeśli serwer korzysta z gniazda synchronicznego, podczas gdy oczekuje na dane od klienta, jego główny wątek jest zablokowany, więc serwer nie będzie nic robił... jest to złe, jeśli masz wielu klientów łączących. W gniazdku asynchronicznym możesz wykonywać inne czynności czekając na wysłanie danych przez klienta, więc teraz możesz mieć wielu klientów łączących się z tobą
Synchronous używa funkcji takiej jak receive (), która blokuje dopóki nie otrzyma wiadomości
Asynchroniczny ma beginReceive () endReceive () lub podobne funkcje. Używa wywołań zwrotnych, gdy wiadomość jest odbierana, wywołanie zwrotne jest wywoływane
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-25 05:41:10