【问题标题】:Hybrid tcp::iostream and socket operation with Boost.AsioBoost.Asio 的混合 tcp::iostream 和套接字操作
【发布时间】:2013-07-13 10:38:07
【问题描述】:

上下文

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

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

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

问题

我们可以先使用 tcp::iostream,然后使用带有下划线的 socket_streambuf 的 async_read 吗?当然编译没问题,但是socket上的读操作是否正确使用了tcp::iostream的内部缓冲区呢? (即使在读取元数据之后也可能不为空)。我想它应该尊重 Liskov 替换原则,但我更愿意确定。

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

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2015-08-18
      相关资源
      最近更新 更多