我是新来的插座IO。我一直在使用socket::read_some()
从套接字中提取数据。我相信我所要求的数据插座往往比数据是可用的插座上,这样看来的“read_some阻塞性质()`就是在该数据来自在插座上的速度减缓我的程序的执行。我想检查数据,然后继续前进,如果什么都不存在。我的代码目前看起来是这样的:检查升压:: ASIO套接字数据之前读?或者我应该使用async_read()?
unsigned char incomingData[PARTIAL_PKT_BUFF_SIZE];
int numRead = 0;
numRead =
_socket.read_some(boost::asio::buffer(incomingData,PARTIAL_PKT_BUFF_SIZE));
如果我实现了在this question第一个答案的代码,它看起来像我将使用一个bytes_readable
对象来控制插座,然后我可以做检查,看是否bytes_readable::get()
返回大于零,然后读取套接字。
它看起来像一个async_read()可能做的工作,但我必须承认,我真的不明白。看起来我需要注册回调,这表明我可能需要在缓冲区周围设置一些安全机制。我是否认为这是一个更复杂的解决方案?
异步IO稍微复杂一些,但折衷几乎总是值得的。我的投票绝对会转移到'async_read()'。如果你不想使用异步IO,为什么即使使用普通老套接字来提升呢? – Chad 2012-03-22 21:02:54
我的吸引力提高的很大一部分是它的平台无关性。 – 2NinerRomeo 2012-03-22 22:35:20
@ 2NinerRomeo我相信乍得人的观点是,使用boost.asio并没有使用异步I/O,你并没有真正获得太多收益。 – 2012-03-23 20:26:12