我使用boost::asio
作为网络框架。作为读/写介质,它使用boost::asio::streambuf
。我想:如何连接两个boost :: asio :: streambuf的?
- 在一个缓冲区中读取一些消息
- 在第一个
- 开始追加第二缓冲器发送新的复合消息
可能有哪些有效的(零复制)选项来做到这一点?
我使用boost::asio
作为网络框架。作为读/写介质,它使用boost::asio::streambuf
。我想:如何连接两个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,但从你的问题,我猜这不是一个选择由于某种原因?
asio::buffer
空闲函数可以接受缓冲区的集合(例如this),结果缓冲区不是缓冲区的副本,而是一个序列 - 将被发送。