2013-07-13 19 views
2

語境

首先一些上下文:一個Boost.Asio的服務器接收格式化如下請求:混合TCP ::的iostream和套接字操作與Boost.Asio的

  • X字節的元數據以XML
  • X字節的可選二進制數據

我們有一個採用std :: istream的XML解析器,因此只需將tcp :: iostream傳遞給此函數就很簡單。下面的二進制數據可以是沉重的,所以直到我們讀取所有數據,我們應該異步讀-say 500ko-的數據包。

問題

我們可以使用TCP :: iostream的第一,然後使用async_read與強調socket_streambuf?當然,這是確定的編制,但確實插槽上的讀操作正確使用TCP :: iostream的內部緩衝區? (即使讀取元數據後,這可能不是空的)。我想它應該尊重Liskov替代原則,但我更願意確定。

我們能否從一種方法切換到另一種,其中/每當我們想要的嗎?

回答

2

最後我沒使用的流都沒有。它們似乎很容易使用,但它們不允許異步操作。我意識到混合同步和異步操作不是一個好主意。將異步操作添加到隊列有助於平衡服務器的負載。結論:您應該只使用異步操作,因爲Boost.Asio主要是爲它們設計的。