Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::asio::ip::tcp::socket中的async_read_some()实际上是如何工作的?_C++_Boost_Boost Asio - Fatal编程技术网

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()
不会阻塞,它将立即返回,然后在稍后异步完成。