Подтвердить что ты не робот

Что такое Async Sockets?

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

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

Спасибо.

4b9b3361

Ответ 1

Существует три способа связи с сокетами с помощью async:

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

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

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

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

Ответ 3

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

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

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