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