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

标签 c++ boost-asio

上下文

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

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

我们有一个采用 std::istream 的 XML 解析器,因此将 tcp::iostream 传递给这个函数真的很容易。接下来的二进制数据可能很重,因此我们应该异步读取数据包(例如 500ko),直到读取所有数据。

问题

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

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

最佳答案

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

关于c++ - 使用 Boost.Asio 进行混合 tcp::iostream 和套接字操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629366/

相关文章:

c++ - 具有成员 std::map 的结构的赋值

C++ 控制台程序(通常)不工作,进程返回 255 (0xFF)

c++ - 如何查找 USB 设备的父级是否是集线器

rest - 将 REST 请求与异步服务器中的响应相匹配

c++ - 在 boost::asio::ip::tcp::socket 上设置非阻塞时出现错误文件描述符错误

c++ - 重新学习现代 C++ 资源?

c++ - 如何使用 strcmp 将字符串与预定义字符串进行比较

c++ - boost asio - 编写等效的代码

c++ - C++ 网络库

c++ - 为 streambuf boost ASIO ForwardIterator