我正在考慮使用可選的獨立操作模式創建服務器/客戶端應用程序。boost :: asio是否支持本地內存連接?
在這種獨立模式下,它不會創建一個真正的TCP服務器/客戶端,只有2個線程,使用內存緩衝區相互通信。
基於ASIO文檔,我確定它可以通過使用通用流協議和自定義協議實現來實現,但是有沒有更容易實現的方法?
我正在考慮使用可選的獨立操作模式創建服務器/客戶端應用程序。boost :: asio是否支持本地內存連接?
在這種獨立模式下,它不會創建一個真正的TCP服務器/客戶端,只有2個線程,使用內存緩衝區相互通信。
基於ASIO文檔,我確定它可以通過使用通用流協議和自定義協議實現來實現,但是有沒有更容易實現的方法?
不,Asio對此功能沒有一流的支持。
然而,短耳不支持與短耳的I/O操作的工作的一些特定於平臺的面向流類型(read()
,async_read()
,write()
,async_write()
,read_until()
和async_read_until()
免費功能):
BOOST_ASIO_HAS_LOCAL_SOCKETS
宏。有關更多詳細信息,請參閱UNIX Domain Sockets概述。如果應用協議基本上是基於消息的,並且使用TCP來保證其可靠性,那麼可以考慮在本地套接字上使用UDP,因爲它們有可靠的保證。BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR
宏來測試它們的平臺是否支持這個功能。BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE
宏來測試它們的平臺是否支持這個功能。請注意,這些通常用於進程間通信,因此它們可能會被其他程序本地訪問。
每次我考慮支持獨立模式時,我都會在其引入的技術債務上減輕運營收益(I/O吞吐量,不一定是應用程序吞吐量)。 –
它可能是最快的只是將您的服務器地址綁定到本地主機。它幾乎肯定會工作,並且足夠快。 –
我不確定速度,但它肯定不是性能問題。我只是很好奇,如果有一個簡單的解決方案,但也有兩個實際的,但我想到的邊緣原因:偏執的防火牆規則阻止本地主機連接,並測試網絡代碼沒有涉及外部因素 – Dutow
下一個最簡單的是使用系統管道,並有代碼實現ASIO易於通過谷歌提供的管道傳輸。請注意,Windows上的管道有重大陷阱,它們在足夠的刺激下工作得很好,但期望大量的調試工作以使它們運行良好。即避免如果您只能使用本地主機。 –