Ускорьте работу Asio TCP Server с несколькими клиентами - PullRequest
0 голосов
/ 24 октября 2018

Я новичок в сетевом программировании и использовании библиотеки Boost Asio.

Я успешно выполнил задачу для своего требования, изменив Boost Asio «Блокировка эхо-сервера TCP и клиента» , который выполняет транзакции операций между моим клиентом и сервером.

Теперь у меня есть требование, чтобы мне нужно было подключить несколько Клиентов к моему Серверу.

Я нашел несколько соответствующих ссылок, предлагающих использовать async_accept на стороне сервера.

Итак, я попытался запустить пример Boost Asio: «Async TCP Echo Server» с «Blocking TCP Echo client» , где сервер различает разных клиентов и соответственно обращается к ним.

Но мои настоящие требования должны быть такими: вместо того, чтобы Сервер завершил весь процесс для одного Клиента, он [сервер] должен выполнить те же операции для первого клиента, затем перейти ко второму клиенту и выполнить теоперации, а затем снова вернитесь к первому клиенту и продолжайте в этом порядке, пока все операции не будут завершены.

Есть ли способ или идея, которая могла бы помочь мне выполнить этот поток с помощью Boost Asio?Кроме того, я просто использую «Блокирующий TCP Echo Client», который просто имеет обычный connect(), а не async_connect(), теперь это проблема?

Кроме того, возможно ли обмениваться данными между несколькимиклиенты через сервер используют Boost Asio?

Заранее большое спасибо!

1 Ответ

0 голосов
/ 25 октября 2018

Существует 2 модели для одновременной работы с несколькими клиентами на сервере.

Один из них - создать новый поток для каждого клиента, а затем каждый поток обрабатывает каждого клиента синхронно.Вторая модель заключается в использовании асинхронных API-интерфейсов в одном потоке, работающих на одном сервисе.Когда принятие завершено, вы создаете новый рабочий поток и запускаете рабочий из send и recv, требуемого вашим протоколом.Ваш основной поток возвращает обратно принимающие новые соединения.

При использовании асинхронного запуска вы заполняете насос с помощью асинхронного принятия и запускаете вызов io_service.По завершении приема ваш обратный вызов запускается.Теперь вы снова заправляете насос с последующим принятием (для большего количества клиентов) запуска async send и recv для вновь созданного клиента.Поскольку все send и recvs не блокируют, ваш поток спит только тогда, когда ему нечего делать.В противном случае метод запуска io_service позаботится обо всем за вас.

Если вы блокируете при отправке и получении через, вы не можете обрабатывать более одного клиента одновременно.

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