Что такое Асинхронные Сокеты?

Что такое Асинхронные Сокеты? Как они отличаются от нормальных сокетов (Блокирование и Неблокирование)?

Любые указатели в том направлении или любые ссылки на учебные руководства будут полезны.

Спасибо.

22
задан Jay 25 February 2010 в 05:35
поделиться

3 ответа

Есть три способа асинхронной связи с сокетами:

  1. Открыть обычный сокет, но не читать из него (поскольку читает ( ) блоков) пока вы не узнаете там что-то почитать. Вы можете использовать select () или poll () , чтобы проверить, есть ли данные для чтения из сокета (ов), и если есть что-то, прочтите это, как read () не блокируется.

  2. Переключите сокет на неблокирующий ввод-вывод, установив флаг O_NONBLOCK с функцией fcntl () . В этом случае read () не будет блокироваться.

  3. Установите флаг сокета O_ASYNC , используя параметр FIOASYNC в ioctl () (подробности см. В сокет man 7 ). В этом случае вы получите сигнал SIGIO , когда есть что-то для чтения из сокета.

Третий подход - асинхронный сокет.

27
ответ дан 29 November 2019 в 05:13
поделиться

Сравнение следующих пяти различных моделей ввода-вывода в Сетевое программирование UNIX: Сетевой API сокетов может оказаться полезным:

Блокирование

Неблокирование

Мультиплексирование ввода-вывода

Управляемый сигналами ввод-вывод

Асинхронный ввод-вывод

3
ответ дан 29 November 2019 в 05:13
поделиться

Если сервер использует синхронный сокет, ожидая данных от клиента, его основной поток блокируется, поэтому сервер ничего не будет делать ... это плохо, если у вас подключено несколько клиентов. В асинхронном сокете вы МОЖЕТЕ делать другие вещи, ожидая, пока клиент отправит вам данные, так что теперь вы МОЖЕТЕ иметь несколько клиентов, подключающихся к вам

Синхронный использует такую ​​функцию, как receive (), которая блокируется, пока не получит сообщение

Асинхронный имеет beginReceive () endReceive () или аналогичные функции. Он использует обратные вызовы, когда сообщение получено, вызывается обратный вызов

2
ответ дан 29 November 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: