我使用boost::asio作为网络框架。作为读写介质,它使用boost::asio::streambuf。我想要:

  • 在一个缓冲区中读取一些消息
  • 在第一个
  • 的开头附加第二个缓冲区
  • 发送新的复合消息

  • 有哪些有效的(零复制)选项可以做到这一点?

    最佳答案

    该原理称为scatter/gather IO。基本上是一次(按顺序)传输多个缓冲区的方法,而无需进行昂贵的内存复制。在boost::asio中,它具有非常灵活和强大的(但也很难理解)缓冲区概念和缓冲区序列概念,因此得到了很好的支持。

    一个让您入门的简单(未经测试,但我相信是正确的)示例将是:

    std::vector<boost::asio::streambuf::const_buffers_type> buffers;
    buffers.push_back( my_first_streambuf.data() );
    buffers.push_back( my_second_streambuf.data() );
    
    std::size_t length = boost::asio::write( mySocket, buffers );
    

    当然,一个简单的选择就是将两条消息都读入streambuf,然后简单地发送整个streambuf,但是由于您的问题,我猜测出于某种原因这不是一个选择吗?

    关于c++ - 如何串联两个boost::asio::streambuf?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9463865/

    10-13 03:33