2015-12-02 81 views
1

我正在考慮使用可選的獨立操作模式創建服務器/客戶端應用程序。boost :: asio是否支持本地內存連接?

在這種獨立模式下,它不會創建一個真正的TCP服務器/客戶端,只有2個線程,使用內存緩衝區相互通信。

基於ASIO文檔,我確定它可以通過使用通用流協議和自定義協議實現來實現,但是有沒有更容易實現的方法?

+0

它可能是最快的只是將您的服務器地址綁定到本地主機。它幾乎肯定會工作,並且足夠快。 –

+0

我不確定速度,但它肯定不是性能問題。我只是很好奇,如果有一個簡單的解決方案,但也有兩個實際的,但我想到的邊緣原因:偏執的防火牆規則阻止本地主機連接,並測試網絡代碼沒有涉及外部因素 – Dutow

+0

下一個最簡單的是使用系統管道,並有代碼實現ASIO易於通過谷歌提供的管道傳輸。請注意,Windows上的管道有重大陷阱,它們在足夠的刺激下工作得很好,但期望大量的調試工作以使它們運行良好。即避免如果您只能使用本地主機。 –

回答

3

不,Asio對此功能沒有一流的支持。

然而,短耳不支持與短耳的I/O操作的工作的一些特定於平臺的面向流類型(read()async_read()write()async_write()read_until()async_read_until()免費功能):

  • local::stream_protocol::socket使用UNIX域套接字(本地套接字)。這些將提供與TCP套接字最接近的匹配。一個程序可以測試他們的平臺是否支持這個宏,通過BOOST_ASIO_HAS_LOCAL_SOCKETS宏。有關更多詳細信息,請參閱UNIX Domain Sockets概述。如果應用協議基本上是基於消息的,並且使用TCP來保證其可靠性,那麼可以考慮在本地套接字上使用UDP,因爲它們有可靠的保證。
  • POSIX Stream-Oriented File Descriptors:管道,標準輸入輸出和各種設備,但不是常規文件。程序可以通過BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR宏來測試它們的平臺是否支持這個功能。
  • Windows Stream-Oriented HANDLEs:命名管道。這需要使用I/O完成端口後端。程序可以通過BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE宏來測試它們的平臺是否支持這個功能。

請注意,這些通常用於進程間通信,因此它們可能會被其他程序本地訪問。

+0

每次我考慮支持獨立模式時,我都會在其引入的技術債務上減輕運營收益(I/O吞吐量,不一定是應用程序吞吐量)。 –