2013-07-13 20 views
2

语境

首先一些上下文:一个Boost.Asio的服务器接收格式化如下请求:混合TCP ::的iostream和套接字操作与Boost.Asio的

  • X字节的元数据以XML
  • X字节的可选二进制数据

我们有一个采用std :: istream的XML解析器,因此只需将tcp :: iostream传递给此函数就很简单。下面的二进制数据可以是沉重的,所以直到我们读取所有数据,我们应该异步读-say 500ko-的数据包。

问题

我们可以使用TCP :: iostream的第一,然后使用async_read与强调socket_streambuf?当然,这是确定的编制,但确实插槽上的读操作正确使用TCP :: iostream的内部缓冲区? (即使读取元数据后,这可能不是空的)。我想它应该尊重Liskov替代原则,但我更愿意确定。

我们能否从一种方法切换到另一种,其中/每当我们想要的吗?

回答

2

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