首先是一些上下文:Boost.Asio服务器接收格式如下的请求:
我们有一个XML解析器,它接受一个std :: istream,所以很容易将tcp :: iostream传递给这个函数。后面的二进制数据可能很重,所以我们应该异步读取-say 500ko的数据包,直到我们读取所有数据。
我们可以先使用tcp :: iostream然后使用async_read和下划线socket_streambuf吗?当然,它可以用于编译,但是套接字上的读操作是否正确使用了tcp :: iostream的内部缓冲区? (即使在阅读元数据后,这也可能不是空的)。我想它应该尊重Liskov替代原则,但我更愿意确定。
我们可以从一种方法切换到另一种方法吗?
答案 0 :(得分:2)
最后我根本没用过这个流。它们似乎易于使用,但它们不允许异步操作。我意识到混合同步和异步操作并不是一个好主意。向队列添加异步操作有助于平衡服务器的负载。结论:您应该只使用异步操作,因为Boost.Asio主要是为它们设计的。