使用Boost.Asio进行混合tcp :: iostream和套接字操作

时间:2013-07-13 10:38:07

标签: c++ boost-asio

上下文

首先是一些上下文:Boost.Asio服务器接收格式如下的请求:

  • XML格式的X字节
  • X字节的可选二进制数据

我们有一个XML解析器,它接受一个std :: istream,所以很容易将tcp :: iostream传递给这个函数。后面的二进制数据可能很重,所以我们应该异步读取-say 500ko的数据包,直到我们读取所有数据。

问题

我们可以先使用tcp :: iostream然后使用async_read和下划线socket_streambuf吗?当然,它可以用于编译,但是套接字上的读操作是否正确使用了tcp :: iostream的内部缓冲区? (即使在阅读元数据后,这也可能不是空的)。我想它应该尊重Liskov替代原则,但我更愿意确定。

我们可以从一种方法切换到另一种方法吗?

1 个答案:

答案 0 :(得分:2)

最后我根本没用过这个流。它们似乎易于使用,但它们不允许异步操作。我意识到混合同步和异步操作并不是一个好主意。向队列添加异步操作有助于平衡服务器的负载。结论:您应该只使用异步操作,因为Boost.Asio主要是为它们设计的。