採用epoll模型伺服器連線管理器實現

2021-05-22 22:23:35 字數 667 閱讀 3664

【應用場景】

在網路伺服器中,需要維護所有連線資訊,通常是以fd做為key,連線資訊結構體做為value。每次有新連線接入時,需求加入乙個對映關係;每次有新資料到達時,需要根據對應的fd查詢到對應的連線資訊結構。

通過上面的場景我們可以抽象出來一類資料,資料的特點如下:

【解決方案】   

一種解決方案是,把資訊儲存在map或hash_map中,可以根據key方便的增、刪、查對應的結構。不過,這兩種儲存方式都有一點的缺點,map查詢的時間複雜度是o(logn),hash_map查詢的時間複雜度是o(1),但是會分配一定的冗餘空間。同時這兩種方式都需要單獨維護乙個記錄數上限。下面討論一種基於下標查詢的優化方案。

【方案優化】

就查詢效率而言,陣列下標索引的時間複雜度是最低的o(1),因此我們可以考慮把所有的記錄都使用下標進行索引,但因為key是動態分配的,比如tcp連線的fd就是系統分配的,因此fd是不適合做下標的,所以我們可以把下標資訊儲存在key資訊中。每次獲得key資訊後,從

key資訊中解出下標,然後直接通過下標進行索引。   這種方案對應用場景又加了一條限制,就是「每次獲取到的key資訊有冗餘字段可以儲存下標」,因為這個方案是從epoll服務模型中抽象出來的,更多的應用場景有待發據掘。

【**示例】

下面以基於epoll模型的伺服器中連線管理為例介紹優化方案的實現。

epoll模型設計海量級連線伺服器

最近在參與乙個海量級 20000以上 遠端連線的伺服器設計,由於使用者要求的硬體平台僅限於linux,因此選擇了epoll模型來實現對海量客戶端連線的處理。先聊一下epoll模型的基本情況。一般來說,非海量級客戶端連線的伺服器,可能用不到epoll模型。一方面是由於epoll模型不能跨平台,另一方面...

18 11 27 高階的伺服器連線 epoll

恢復內容開始 之前的 http 伺服器 都是採用 輪詢的方式 就像 廚師挨個問誰餓了好做飯 一樣 而 epoll 用著高階的 方式 事件通知 直接問誰餓了 同時還和 計算機共享內純 預設閘道器 好像是接到路由器 上面的 mac位址 類似於網絡卡的預設 數值 在路由器上面 有兩個 mac 網絡卡 乙個...

採用Socket方式,測試伺服器連線

資料庫連線操作,可替換為你自己的程式 連線字串 private static bool testconnection string connectionstring catch exception ex return result region 採用socket方式,測試伺服器連線 採用socket...