2012-02-27 137 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),結果緩衝區不是緩衝區的副本,而是一個序列 - 將被髮送。

相關問題