我使用boost ASIO來處理這樣每個線程的會話:升壓ASIO - 會話線程並沒有結束
Server::Server(ba::io_service& ioService, int port): ioService_(ioService), port_(port)
{
ba::ip::tcp::acceptor acceptor(ioService_, ba::ip::tcp::endpoint(ba::ip::tcp::v4(), port_));
for (;;)
{
socket_ptr sock(new ba::ip::tcp::socket(ioService_));
acceptor.accept(*sock);
boost::thread thread(boost::bind(&Server::Session, this, sock));
}
}
void Server::Session(socket_ptr sock)
{
const int max_length = 1024;
try
{
char buffer[256] = "";
// HandleRequest() function performs async operations
if (HandleHandshake(sock, buffer))
HandleRequest(sock, buffer);
ioService_.run();
}
catch (std::exception& e)
{
std::cerr << "Exception in thread: " << e.what() << "\n";
}
std::cout << "Session thread ended \r\n"; // THIS LINE IS NEVER REACHED
}
在服務器::會議()我在某些時候異步IO使用async_read_some(辦)和async_write()函數。 一切運作良好,爲了這個工作我必須有我的產卵線程否則服務器::會議()函數退出內部ioService_.run()的調用,它不處理所需的IO工作。
的問題是,ioService_.run()從我的線程調用會導致該線程完全不退出,因爲在此期間,其他請求來我的聽力服務器套接字。
什麼我最終是啓動線程和處理,現在的會議,但從來沒有釋放資源(結束)。使用這種方法時是否可以只使用一個boost :: asio :: io_service?
這是一種使用boost :: asio的奇怪方法。你讀過教程嗎?看看HTTP Server 3的例子。它使用線程池來服務多個連接,每個線程調用'io_service :: run()'。 – mark 2012-01-29 19:38:08
@mark我實際上是在尋找一個簡單的解決方案,只是我的程序的一個概念證明。我設法做到了,最終沒有使用線程 – Ghita 2012-01-30 09:05:41