Non ho molta esperienza in boost::asio
. Ho alcune domande piuttosto elementari.Abbiamo bisogno di più io_service per thread per boost filettato :: server asio con un singolo accettore
ho bisogno di avere un diverso io_service
, e un diverso socket
sotto un diverso thread
ma un unico acceptor
, per elaborare un cliente in un server filettato?
Credo di avere un socket diverso per un nuovo client. Ma se tutti i thread usano lo stesso io_service
sarebbe parallelo?
Stavo passando attraverso http://en.highscore.de/cpp/boost/index.html nella sezione asio che dice che ho bisogno di avere diversi io_services in thread diversi per ottenere la parallelizzazione.
I se ho intenzione di fare una classe server che crea un new TCPsession
ogni volta che un nuovo cliente viene visualizzato nella acceptor.async_accept
e TCPSession
ctor crea un io_service
e un thread
e corre che io_service.run()
nel proprio thread sarebbe un buon progetto ?
Tuttavia in questo progetto dovrei unirmi a tutti questi thread? ho bisogno di un altroper main
in modo che non termini ancora prima di ottenere un nuovo Cliente?
allora che cosa la per le discussioni della sessione fare? per esempio. non dovrei avere una sessione in un thread? per rendere ogni sessione parallela? Comunque dovrei avere <5 sessioni simultanee contemporaneamente. Anche se mi piacerebbe conoscere la soluzione generica –
No, non è necessario. Leggi quanto segue: http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview/core/async.html. L'unico caso in cui potresti aver bisogno di thread aggiuntivi è se i gestori di completamento di TCPSession sono troppo pesanti (ad esempio, eseguono operazioni DB che richiedono molto tempo). Ma poi la tua applicazione non sarebbe scalabile in ogni caso, quindi dovresti cambiare il progetto per dividere o spostare un lavoro fuori dai gestori di completamento. –
Quindi se ho solo un socket diverso per sessione andrà bene? e posso prima sviluppare tutto in thread singolo? e quindi passare a più thread? –