Tôi đang cố gắng tạo một máy chủ đồng bộ tcp. Chủ đề chính của tôi sẽ tạo ra lắng nghe một cổng, và một kết nối đến sẽ được xử lý bởi một luồng.Tăng Asio Multithreaded TCP Synchronous Server
Mã của tôi:
void WorkerThread(boost::shared_ptr<boost::asio::io_service> io_service)
{
io_service->run();
}
void Application::server()
{
boost::shared_ptr<boost::asio::io_service> io(
new boost::asio::io_service()
);
boost::shared_ptr<boost::asio::io_service::work> work(
new boost::asio::io_service::work(*io)
);
// Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR
boost::asio::ip::tcp::acceptor acceptor(*io);
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 2198);
acceptor.open(endpoint.protocol());
acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
acceptor.bind(endpoint);
acceptor.listen();
// pool of threads
boost::thread_group worker_threads;
for(int x = 0; x < 5; ++x)
{
worker_threads.create_thread(boost::bind(&WorkerThread, io));
}
while(true)
{
boost::shared_ptr<boost::asio::ip::tcp::socket> socket(
new boost::asio::ip::tcp::socket(*io)
);
acceptor.accept(*socket);
processConnection(*socket);
socket->close();
}
io->stop();
worker_threads.join_all();
}
void Application::processConnection(boost::asio::ip::tcp::socket & socket)
{
boost::asio::streambuf request_buffer;
std::istream request_stream(&request_buffer);
// repsonse buffer
boost::asio::streambuf response_buffer;
std::ostream response_stream(&response_buffer);
boost::asio::read_until(socket, request_buffer, "</message>");
// process request_buffer into response_buffer
boost::asio::write(socket, response_buffer);
}
Sau đây đang làm việc với nhiều hơn một client kết nối đến máy chủ; Tuy nhiên, nó cũng hoạt động nếu tôi loại bỏ các hồ bơi của thread. Bất cứ ai có thể giải thích cho tôi tại sao đó là? Tôi thậm chí cần một loạt các chủ đề? Tuy nhiên,
là có một tình huống mà tôi sẽ cần sử dụng run() trên một máy chủ đồng bộ? – Takashi
@ Takashi-kun không có –