[英]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.