@pixik

Чем отличается синхронный сервер от асинхронного сервера в boost?

Доброго времени! Изучаю boost, и не могу понять, в чем качественное отличие асинхронного сервера от синхронного?
асинхронный сервер
синхронный сервер
В синхронном как только принимается сообщение на сокет, формируется сообщене и отправляется клиенту. тут все понятно.
С асинхронным пока не получается разобраться. Кто разбирается, объясните пожалуйста или подскажите ресурс, где объясняется для простых смертных.
Благодарю!
  • Вопрос задан
  • 8443 просмотра
Пригласить эксперта
Ответы на вопрос 2
Сразу оговорюсь, могу ошибаться, я boost asio не использовал

С синхронным всё верно. При этом клиенты обрабатываются по очереди.
С асинхронным иначе.

1. В конструкторе tcp_server зовётся start_accept, который зовёт async_accept и возвращается управление обратно.
2. Затем зовется io_service.run(), судя по всему, где-то внутри он-таки принимает подключение и вызывает handle_accept, который был забинжен при start_accept и пункта 1.
3. handle_accept зовёт start, который зовёт async_write, т.е. не дожидается отправки данных, а опять же сразу возвращает управление. По окончании отправки вызовется handle_write
4. затем снова start_accept -> async_accept и возврат

Т.е. в синхронном случае второй клиент не подключится, пока первому полностью не ответят
В асинхронном случае вызывается async_write, и до окончания ответа первому клиенту, в принципе может уже подключиться второй.

Вообще асинхронный способ для того и нужен, чтобы, приняв соединение клиента, сразу начинать принимать следующего, а с первым клиентом работать уже отдельно.
Ответ написан
MAKAPOH
@MAKAPOH
многостаночник
в чем качественное отличие асинхронного сервера от синхронного?
Насколько я понимаю, принципиальная разница в том кто занимается перекачкой данных, ядро ОС или ваше приложение. В асинхронном (неблокирующем) режиме вы просите ОС вызвать некоторые код по наступлении определённых событий, например когда присоединился новый клиент, когда данные от клиента получены или отправлены клиенту и т.п.

подскажите ресурс, где объясняется для простых смертных
Не являюсь профи в данном вопросе, для себя разбирался по оф. документации. Так же могу порекомендовать парочку видео уроков от mail.ru:
  • раз - обзор сокетов, синхронный, асинхронный режим, небольшой обзор api различных ОС
  • два - обзор библиотек libevent, boost::asio и т.п.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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