[英]In boost::asio, why does the asynchronous accept handler need to restart the asynchronous accept?
在boost :: asio(異步TCP服務器)的Daytime.3教程中,類tcp_server
包含以下兩種方法:
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.get_io_service());
acceptor_.async_accept(new_connection->socket(),
boost::bind(&tcp_server::handle_accept, this, new_connection,
boost::asio::placeholders::error));
}
void handle_accept(tcp_connection::pointer new_connection,
const boost::system::error_code& error)
{
if (!error) new_connection->start(); // ***
start_accept();
}
我擔心的是標有***
的線。 如果此操作需要很長時間才能完成,該怎么辦? 即使沒有, ***
行和start_accept
調用之間也必須有一些時間間隔,在此期間服務器將無法接受傳入連接。 async_accept
注冊一個在接受第一次連接時不會停止的OS處理程序會不會更有意義? 此外,這是一個真正的問題,我將如何解決它?
服務器不會“無法接受傳入連接”; 這就是套接字API中listen()
函數的第二個參數。 但是你是正確的,服務器可以延遲處理客戶端請求。 需要大量計算的單線程應用程序將導致問題,因此這個特定示例實際上只執行IO的原因。 如果您的服務器確實需要執行CPU密集型操作,那么應該將處理程序傳遞給某種類型的任務管理器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.