C++ boost::asio::ip::tcp::socket中的async_read_some()实际上是如何工作的?
它写在: 此函数用于从流异步读取数据 插座函数调用总是立即返回 我知道它是异步的,所以它会立即返回。但是C++ boost::asio::ip::tcp::socket中的async_read_some()实际上是如何工作的?,c++,boost,boost-asio,C++,Boost,Boost Asio,它写在: 此函数用于从流异步读取数据 插座函数调用总是立即返回 我知道它是异步的,所以它会立即返回。但是async\u read\u some()与自由函数read()有什么不同?当我尝试std::cout我用于async\u read\u some()的缓冲区时,函数似乎会多次读取,直到流中的数据用完为止 这是否意味着async\u read\u some()连续请求,直到它接收到HTTP GET请求中的每个数据?服务器一次只写一点,然后向客户端发送一点(对于async\u read\u so
async\u read\u some()
与自由函数read()有什么不同?当我尝试std::cout
我用于async\u read\u some()
的缓冲区时,函数似乎会多次读取,直到流中的数据用完为止
这是否意味着async\u read\u some()
连续请求,直到它接收到HTTP GET请求中的每个数据?服务器一次只写一点,然后向客户端发送一点(对于async\u read\u some()
,读取一点完整的数据),或者一次将所有数据转储到客户端
async\u read\u some()
与自由函数read()
有什么不同
顾名思义,成员方法async\u read\u some()
是异步的。自由函数read()
不可用
我试图std::cout
我的缓冲区用于async\u read\u some()
函数多次读取,直到流中没有数据
它将从流中读取到您指定的缓冲区大小,这可以通过多次读取操作完成,也可以不通过多次读取操作完成
这是否意味着async\u read\u some()
接收每个数据,例如HTTP GET请求中的数据?和
服务器一次只写一点,向客户端发送一点
(用于async\u read\u some()
读取一点点完整数据),或者
是否立即将所有数据转储到客户端
不完全是。这意味着您的应用程序可以同时为多个套接字提供服务,而无需显式使用线程。在这里,服务器和应用程序之间的交互与异步方法的使用是正交的。您的应用程序应该需要一个字节流。服务器的实现方式与应用程序无关。否,async\u read\u some()
不会连续请求
ip::tcp::socket::async\u read\u some()
函数将进行系统调用,以启动读取
之后,下次调用传递给ip::tcp::socket
构造函数的io\u服务
上的io\u服务::run()
时,io\u服务
将检查async\u read\u some()
是否读取了任何数据
如果已读取数据,则它将调用传递给async\u read\u some()
的ReadHandler
回调
如果数据尚未读取,则下次调用io_service::run()
时,它将返回并再次检查是否完成,这意味着read()将挂起,直到从流中读取所有数据为止?是的,尽管通常的术语是“阻塞”,而不是“挂起”<代码>读取()
将被阻止,直到完成async\u read\u some()
不会阻塞,它将立即返回,然后在稍后异步完成。