Лучший способ реализовать обработку таймаутов чтения сокетных соединений асинхронным способом с использованием C ++ и стандартной библиотеки C - PullRequest
0 голосов
/ 14 ноября 2018

Тысячи клиентов обращаются к моему серверу (A) по TCP / IP, затем мне нужно изменить полученные данные и отправить их на другой сервер (B), а затем получить ответ и отправить его обратно клиентуили обработайте тайм-ауты чтения.

Сейчас рабочий поток на сервере A выбирает данные из сокета, отправляет данные на сервер B через TCP / IP, и в случае медленного сервера B потоки моего сервера застряли в ожидании,Это полностью синхронно.

Короче говоря, я хочу реализовать асинхронную обработку таймаутов чтения или чтения сокетов.Таким образом, потоки могут вернуться в пул после отправки данных на сервер B, и в случае, если сервер B становится медленным, сервер A все еще обслуживает запросы.Я понимаю, что мы можем добиться с помощью опроса, выбора системных вызовов, но каким должен быть лучший способ / практика для достижения этого.(Я не могу использовать повышение)

1 Ответ

0 голосов
/ 14 ноября 2018

Вам необходимо использовать неблокирующие сокеты с библиотекой цикла событий, такой как boost :: asio, libevent, libuv.Или заново изобрести собственное колесо.

...