У меня мало опыта в boost::asio
. У меня есть довольно простые вопросы.Нужно ли нам несколько io_service на поток для потокового boost :: asio-сервера с одним акцептором
мне нужно иметь различный io_service
и другой socket
под другим thread
но один одиночный acceptor
, обрабатывать клиент в резьбовом сервере?
Я считаю, что у меня должен быть другой сокет для нового клиента. Но если все потоки будут использовать тот же самый io_service
, будет ли он параллельным?
Я прошел через http://en.highscore.de/cpp/boost/index.html в разделе asio , в котором говорится, что для достижения параллелизма мне нужно иметь разные io_services в разных потоках.
я, если я планирую сделать класс сервера, который создает new TCPsession
каждый раз, когда появляется новый клиент в acceptor.async_accept
и TCPSession
т е р создает io_service
и thread
и бежит, что io_service.run()
в своем собственном потоке это будет хороший дизайн ?
Однако в этом дизайне, где бы я присоединился ко всем этим темам? мне нужен еще io_service
для main
, чтобы он не прекращался даже до получения нового Клиента?
Тогда какая за сеансовые потоки делать? например не должен ли я иметь один сеанс в одном потоке? чтобы каждый сеанс был параллельным? Однако у меня должно быть 5 одновременных сессий одновременно. Хотя я хотел бы знать решение общего назначения –
Нет, вам это не нужно. Прочтите следующее: http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview/core/async.html. Единственный случай, когда вам понадобятся дополнительные потоки, - это то, что обработчики завершения TCPSession слишком тяжелы (например, выполняют трудоемкие операции с БД или так). Но тогда ваше приложение не будет масштабируемым в любом случае, поэтому вам придется изменить дизайн, чтобы разделить или переместить некоторую работу из обработчиков завершения. –
Итак, если у меня только разный сокет за сеанс, все будет хорошо? и могу ли я сначала развить все это в одном потоке? а затем переключиться на несколько потоков? –