2012-02-27 115 views
4

我使用boost::asio作为网络框架。作为读/写介质,它使用boost::asio::streambuf。我想:如何连接两个boost :: asio :: streambuf的?

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

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

回答

5

该原理被称为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,但从你的问题,我猜这不是一个选择由于某种原因?

0

asio::buffer空闲函数可以接受缓冲区的集合(例如this),结果缓冲区不是缓冲区的副本,而是一个序列 - 将被发送。

相关问题