Nie mam dużego doświadczenia w boost::asio
. Mam kilka dość podstawowych pytań.Czy potrzebujemy wielu io_service na wątek dla boostu gwintowanego :: serwer asio z pojedynczym akceptorem
Czy muszę mieć inną io_service
i inny socket
pod inną thread
ale jeden acceptor
, aby przetwarzać klienta w gwintowaną serwerze?
Uważam, że muszę mieć inne gniazdo dla nowego klienta. Ale czy wszystkie wątki używają tego samego io_service
czy byłby równoległy?
Przechodziłem przez http://en.highscore.de/cpp/boost/index.html w sekcji ASIO , która mówi, że muszę mieć różne io_services w różnych wątkach, aby osiągnąć równoległość.
I jeśli mam zamiar zrobić klasę serwera, który tworzy new TCPsession
każdym razem, gdy nowy klient pojawia się w acceptor.async_accept
i TCPSession
konstruktor tworzy io_service
i thread
i biegnie że io_service.run()
we własnym wątku, że będzie to dobry projekt ?
Jednak w tym projekcie, gdzie chciałbym dołączyć wszystkie te wątki? potrzebuję kolejnego io_service
dla main
, aby nie kończyło się jeszcze przed uzyskaniem nowego klienta?
Więc co będzie za wątków sesji zrobić? na przykład nie powinienem mieć jednej sesji w jednym wątku? aby każda sesja była równoległa? Jednak mam mieć jednocześnie <5 równoległych Sesji. Chociaż chciałbym poznać rozwiązanie ogólnego przeznaczenia –
Nie, nie potrzebujesz tego. Przeczytaj: http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview/core/async.html. Jedynym przypadkiem, w którym możesz potrzebować dodatkowych wątków, jest to, że moduły obsługi zakończeń TCPSession są zbyt ciężkie (np. Wykonują czasochłonne operacje bazy danych). Ale wtedy twoja aplikacja i tak nie byłaby skalowalna, więc musiałbyś zmienić projekt, aby podzielić lub przenieść trochę pracy z programów obsługi zakończenia. –
Więc jeśli mam tylko inne gniazdo na sesję To będzie w porządku? i czy mogę najpierw rozwinąć całość w pojedynczym wątku? a następnie przejść do wielu wątków? –