因爲本人從事行業關係,Linux環境下的低延遲通訊是我關注的技術之一。要達到極端的低延遲,固然同機器內IPC比網絡通訊快,而Linux IPC方式中無疑是共享內存延遲最低。不過相對於TCP這種通用的通訊方式來講,共享內存缺乏了一些控制層的協議,好比進程A和B經過一個基於共享內存的消息隊列通訊,A很難知道隊列另外一端的B是否存在,具體的說就是基於共享內存的簡單消息隊列缺乏了鏈接創建和斷開的控制。git
另外一方面,相對於SHM(共享內存)來講,使用TCP也有些本身的痛點:除了延遲之外,重連恢復是個全部應用場景下都不可避免的問題。咱們知道,因爲網絡問題或進程崩潰,TCP鏈接斷開是很常見的事情,斷開前發送方發出的數據可能沒有被接收,也可能接收了還沒被處理接收方就掛了,因此爲了確保不丟失信息,發送方的應用程序須要保存已發送的信息,即便本身並不須要,等收到對方的確認消息才能丟棄。也就是說,一個真正可靠的TCP應用程序須要作不少無關業務的控制層的事情。而這個問題SHM並不存在,只要機器不掉電,程序的崩潰與重啓對於SHM是透明的,也就是說崩潰前已寫入且未讀取的數據還會在那裏,程序重啓後不需作任何數據重傳之類的事情。github
因而我想,若是TCP和SHM分別彌補了上述各自的缺點,那麼它們使用起來將會及其類似:就像一個帶鏈接屬性的持久化消息隊列,用戶能夠像操做一個普通消息隊列同樣push和pop消息,對於發送方來講已經push的消息不須要本身保存副本,對於接受方來講沒有pop的消息不會丟失,同時雙方都能知道對方是否還活着。這樣一個抽象的消息隊列能夠基於TCP,以支持遠程通訊,也能夠基於SHM, 以提供超低延遲,這對於用戶來講能夠徹底透明。網絡
TCPSHM就是這樣一個解決方案。TCPSHM是一個Linux下的輕量級高性能的C++模板類庫開源項目,提供了客戶端和服務端的框架,同時高度可配置和可定製。歡迎感興趣的同窗瞭解一下,並提出寶貴的意見,謝謝~框架
連接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取碼:x2p5
免費分享,可是X度限制嚴重,如若連接失效點擊連接或搜索加羣 羣號744933466。tcp