Могу ли я использовать Boost :: Asio и не беспокоиться о проблемах сетевого программирования?

Я должен сделать сервер в моем текущем проекте, но у меня нет никакого или небольшого опыта в этой области. У меня вопрос, могу ли я просто использовать Asio в своем проекте, и он будет просто решать любые проблемы, с которыми сталкивается обычный сервер (частичное чтение, проблемы многопоточности, …)?

(Мой сервер должен будет обрабатывать сотни клиентов одновременно)

2

Решение

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

Но действительно, что касается получения неопределенного количества байтов, вам не придется беспокоиться о том, как это реализовано.

Многопоточность «проста» в том смысле, что вы можете запускать процессор ASIO несколько раз одновременно, но это ваш ответственность за предоставление обратного вызова для чтения, который может быть запущен несколько раз одновременно.

4

Другие решения

Asio намеренно не многопоточный. Он обрабатывает параллелизм мультиплексирование через операционную систему select(), kqueue, epollили другой механизм.

Что касается частичного получения, то не существует автоматического способа заставить TCP соблюдать границы сообщений. Asio ничего не может с этим поделать, поэтому вам понадобится некоторая техника на уровне приложения, чтобы показать завершение. HTTP традиционно обрабатывает это, закрывая сокет, когда он закончен, хотя также возможно предварительно отправить размер сообщения.

2