我有每個連接到服務器和接收數據從他們多個應用程序的處理。通常連接的服務器和檢索的數據在進程之間重疊。因此,有很多在網絡中的數據的不必要的重複,比應該是必要的(其中徵稅服務器)更多的連接,並且將數據最終得到冗餘地存儲在存儲器中的應用程式。通過多個進程共享連接和數據的最快方法?
一種解決方案是將多個應用程序合併到一個單一的一個 - 但在大多數情況下,他們確實在邏輯上不同,這可能是多年的工作。
不幸的是,等待時間非常重要,而且數據量很大(任何一個數據可能都不太大,但是一旦客戶端發出請求,服務器會在數據發生變化時發送更新流,可以高達20MB/s,並且這些全部都需要以儘可能短的延遲提供給請求的應用程序)。
,想到的解決方案是編碼一個本地守護進程,該應用程序流程將與請求數據。守護進程會檢查與相應服務器的連接是否已經存在,如果不存在,然後它會檢索數據並使用共享內存(由於延遲問題,否則我會使用套接字)將數據提供給請求的應用程序。
在短期內只會解決冗餘連接的一個簡單的想法是使用unix域套接字(這將在unix操作系統上運行,儘管我願意堅持跨平臺庫),以便共享一個套接字所有進程之間的描述符,因此它們共享一個連接。與此相關的問題是消耗緩衝區 - 我希望所有進程都能看到通過套接字的所有內容,如果我理解正確,使用此方法時,讀取套接字上的一個進程將阻止其他進程在其上看到相同的數據下一次讀取(共享描述符內的偏移量將被碰撞)。
+1我會將此延伸到網絡上的多播和本地訪問的共享內存的組合。 – 2009-09-30 18:34:36