Что такое асинхронные сокеты? - PullRequest
22 голосов
/ 25 февраля 2010

Что такое асинхронные сокеты? Чем они отличаются от обычных сокетов (блокирующих и неблокирующих)?

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

Спасибо.

Ответы [ 3 ]

26 голосов
/ 25 февраля 2010

Существует три способа асинхронной связи с сокетами:

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

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

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

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

3 голосов
/ 25 февраля 2010

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

Блокировка

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

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

Сигнальный ввод-вывод

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

2 голосов
/ 25 февраля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...