分享一個Linux C++消息通信框架TCPSHM


由於本人從事行業關系,Linux環境下的低延遲通信是我關注的技術之一。要達到極端的低延遲,當然同機器內IPC比網絡通信快,而Linux IPC方式中無疑是共享內存延遲最低。不過相對於TCP這種通用的通信方式來說,共享內存缺少了一些控制層的協議,比如進程A和B通過一個基於共享內存的消息隊列通信,A很難知道隊列另一端的B是否存在,具體的說就是基於共享內存的簡單消息隊列缺少了連接建立和斷開的控制。

 

另一方面,相對於SHM(共享內存)來說,使用TCP也有些自己的痛點:除了延遲以外,重連恢復是個所有應用場景下都不可避免的問題。我們知道,由於網絡問題或進程崩潰,TCP連接斷開是很常見的事情,斷開前發送方發出的數據可能沒有被接收,也可能接收了還沒被處理接收方就掛了,所以為了確保不丟失信息,發送方的應用程序需要保存已發送的信息,即使自己並不需要,等收到對方的確認消息才能丟棄。也就是說,一個真正可靠的TCP應用程序需要做很多無關業務的控制層的事情。而這個問題SHM並不存在,只要機器不掉電,程序的崩潰與重啟對於SHM是透明的,也就是說崩潰前已寫入且未讀取的數據還會在那里,程序重啟后不需做任何數據重傳之類的事情。

 

於是我想,如果TCP和SHM分別彌補了上述各自的缺點,那么它們使用起來將會及其相似:就像一個帶連接屬性的持久化消息隊列,用戶可以像操作一個普通消息隊列一樣push和pop消息,對於發送方來說已經push的消息不需要自己保存副本,對於接受方來說沒有pop的消息不會丟失,同時雙方都能知道對方是否還活着。這樣一個抽象的消息隊列可以基於TCP,以支持遠程通信,也可以基於SHM, 以提供超低延遲,這對於用戶來說可以完全透明。

 

TCPSHM就是這樣一個解決方案。TCPSHM是一個Linux下的輕量級高性能的C++模板類庫開源項目,提供了客戶端和服務端的框架,同時高度可配置和可定制。歡迎感興趣的同學了解一下,並提出寶貴的意見,謝謝~

鏈接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取碼:x2p5

免費分享,但是X度限制嚴重,如若鏈接失效點擊鏈接或搜索加群 群號744933466


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM