因為工作關系,經常用到心跳包。之前是在服務端中的連接的實體中保持一個timer,每秒加一,每次服務端接到客戶端的心跳,就會把計數置為0。 當累加到20秒的時候,服務端會接到客戶端拋出的掉線函數回調,就會視為客戶端掉線,然后從緩存中刪掉掉線用戶。
實際測試結果表明,這種判斷掉線的方式非常靠譜。7*24小時運行不會出現任何異常。但是每個實體保持一個timer,服務器的開銷太大了。
所以這里我想到一種方式,就是在實體中包含一個 DateTime LastReceiveHeartBeatTime字段,每當客戶端來了心跳,服務端就會將這個字段更新一次。
然后服務端只需要開一個timer,每隔20秒鍾巡查一次實體中的這個字段和當前時間的差值,即可來判斷設備是否掉線。
這樣就大大的減小了服務端的負擔。