使用雙向鏈表和Hashtable來加速處理“心跳”逾時檢測

來源:互聯網
上載者:User

  “心跳”逾時檢測是幾乎所有C/S結構的應用需要處理的一個問題。伺服器需要通過它來及時清理意外中斷的用戶端。本文希望通過一種空間換時間的策略,使得檢測時間從O(所有已串連用戶端數)降低到O(已經逾時的用戶端數)。

一般來說,這個操作需要遍曆所有的正在串連狀態的用戶端來找出哪些是已經逾時的,演算法複雜度為O(N)。在多線程伺服器中,進行檢測時需要對記錄所有用戶端的列表進行鎖定,如果演算法執行時間較長,則會使得系統中其他需要訪問用戶端列表的線程阻塞。

下文描述了空間換時間的具體措施:

資料結構

我們使用一個雙向鏈表來儲存已串連的用戶端列表。該列表的添加操作和收到心跳資料包處理操作使得該鏈表保持按照最後一次收到心跳資料包絕對時間的升序排列。使用另外一個Hashtable來儲存用戶端對象與雙向鏈表節點的映射關係。

 

添加新串連

新的用戶端加入到隊列末尾(複雜度O(1)),並且將用戶端對象和其對應的雙鏈表節點對象放入Hashtable中(複雜度也是O(1))。

 

收到心跳資料包處理

一旦底層傳輸接收到某個用戶端發送到的“心跳”資料包,則首先根據它從Hashtable中取出雙向鏈表節點對象(複雜度O(1)),將此節點移動到鏈表末尾(複雜度也是O(1))。

 

刪除串連

如果某用戶端串連正常退出或者逾時退出,則首先根據它從Hashtable中取出雙向鏈表節點對象(複雜度O(1)),然後Hashtable中將其刪除,然後從雙向鏈表中刪除節點(複雜度也是O(1))。

 

“心跳”逾時檢測

從雙向鏈表的前端節點開始向後逐個檢測用戶端的“心跳”狀態,遇到第一個正常的用戶端之後即可停止檢測。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.