По сути, я пытаюсь реализовать универсальный многопоточный TCP-сервер, который может обрабатывать произвольные запросы для использования 2-мя разными серверами с немного разными потребностями.
Мои требования:
- Запрос не может начать обрабатываться, пока не будет получен весь первоначальный запрос.(По сути, у меня есть заголовок запроса фиксированного размера, который, помимо прочего, включает размер всего запроса).
- Обработка запроса может привести к множеству ответных сообщений запрашивающему клиенту.IE, как правило, запросы могут быть обработаны в одном ответе, но иногда, в ответ на длительные транзакции с базой данных, мне нужно связываться с клиентом, давая ему понять, что я все еще работаю, и не прерывать соединение.
Чтобы добиться этого, я довольно внимательно следил за примером № 2 сервера HTTP из boost v1.44.В общем, пример работал для простых случаев.Что я заметил, так это то, что когда я масштабируюсь до одновременной обработки нескольких запросов, сделанные мной изменения каким-то образом приводят к тому, что все запросы обрабатываются последовательно, одним потоком.Очевидно, что я делаю что-то не так.
Я не могу опубликовать весь фактический код, который я использую, из-за ограничений работодателя, но достаточно сказать, что я сохранил асинхронные вызовы, чтобы принять новыйподключений, но заменили асинхронное чтение / запись синхронными вызовами.Если есть конкретные фрагменты, которые, по вашему мнению, вам нужны, я могу посмотреть, что я могу сделать.
По сути, я ищу указатели на то, как использовать boost :: asio для многопоточного TCP-сервера.где отдельные соединения обрабатываются одним потоком с синхронным вводом / выводом.Опять же, имейте в виду, моя абстракция основана на примере http-сервера № 2 (один io_service на каждый процессор), но я гибок к альтернативе