#c #sockets #networking #boost
#c #сокеты #сеть #повышение
Вопрос:
У меня есть сервер C , где клиенты будут подключаться к сокету сервера и получать результаты поиска. Я использую библиотеку Boost для программирования своих сокетов.
Всего будет 5 результатов поиска, к которым подключается клиент. Вычисление этих результатов поиска для сервера является дорогостоящим, и вычисления выполняются итеративным способом. Теперь, что происходит много раз, так это то, что клиенты отключаются после того, как они получили результаты для 2 или 3 результатов поиска. Я хочу остановить поток обработки поиска, как только клиент, отправивший запрос, отключится. Какой лучший вызов API для подтверждения этого? Я готов написать свою собственную оболочку поверх boost, если это вообще возможно.
Я использую только HTTP.
Спасибо
Комментарии:
1. Используете ли вы HTTP или HTTPS (или оба) в качестве своего протокола?
2. @owacoder : Я добавил информацию к вопросу. Я использую только HTTP.
Ответ №1:
Единственный способ обнаружить отключение TCP — это выполнить с ним ввод-вывод. После нескольких отправок одноранговому узлу, который отключился, вы получите ECONNRESET. Это не произойдет при первой отправке из-за буферизации TCP.
Комментарии:
1. Спасибо за информацию, но в таком случае я бы фактически отправил клиенту мошенническое сообщение?
2. @Geek, насколько я знаю, наиболее распространенный способ справиться с этими вещами с помощью HTTP (ов) — это использовать мониторинг тайм-аута соединения (отключение сокета, если в течение определенного периода времени не происходило никаких действий).). Тайм-ауты для приема запроса часто короче, чем тайм-ауты для обработки запроса (т.Е. в моем facil.io в проекте время ожидания входящего http по умолчанию составляет 5 секунд, в то время как время ожидания обработки ответа составляет 300 секунд).