Чем отличается синхронный сервер от асинхронного сервера в boost?
Сразу оговорюсь, могу ошибаться, я 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, и до окончания ответа первому клиенту, в принципе может уже подключиться второй.
Вообще асинхронный способ для того и нужен, чтобы, приняв соединение клиента, сразу начинать принимать следующего, а с первым клиентом работать уже отдельно.
в чем качественное отличие асинхронного сервера от синхронного? Насколько я понимаю, принципиальная разница в том кто занимается перекачкой данных, ядро ОС или ваше приложение. В асинхронном (неблокирующем) режиме вы просите ОС вызвать некоторые код по наступлении определённых событий, например когда присоединился новый клиент, когда данные от клиента получены или отправлены клиенту и т.п.подскажите ресурс, где объясняется для простых смертных Не являюсь профи в данном вопросе, для себя разбирался по оф. документации. Так же могу порекомендовать парочку видео уроков от mail.ru:раз - обзор сокетов, синхронный, асинхронный режим, небольшой обзор api различных ОС два - обзор библиотек libevent, boost::asio и т.п.