Socket之心跳包實現(xiàn)思路
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
由于最近要做一個客戶端,但是要求有一個掉線檢測的功能,下面讓我們看看使用自定義的HeartBeat方式來檢測客戶端的連接情況。 心跳包的實現(xiàn)思路:
代碼: 客戶端每隔一段時間,發(fā)送一個心跳包: var timer = new System.Timers.Timer(); timer.Interval = 60000; //1m觸發(fā)一次 timer.Start(); timer.Elapsed += (sender, args) => { Console.WriteLine("開始發(fā)送心跳包"); MMessage message = new MMessage(); message.MessageType = MessagePicks.Heartbeat; // message.From = loginName; WriteToStream(message); }; 服務(wù)端每隔一段時間檢測: var timer = new Timer(); timer.Interval = 60000; //1m觸發(fā)一次 timer.Start(); timer.Elapsed += (sender, args) => { List<MClient> offClients = new List<MClient>(); foreach (var client in clients) { if ((DateTime.Now - client.LastOnLine).TotalMinutes > 1) { Console.WriteLine("用戶" + client.Name + "掉線!"); offClients.Add(client); } } foreach (var offClient in offClients) { clients.Remove(offClient); } }; 服務(wù)端收到心跳包的處理邏輯: Console.WriteLine("收到客戶端" + msg.RemoteEndPoint + "的心跳回應包."); client.LastOnLine = DateTime.Now; //收到心跳包,更新時間 client.Name = msg.RemoteEndPoint.ToString(); client.RemoteEndPoint = msg.RemoteEndPoint; if (!clients.Contains(client)) { clients.Add(client); } 該文章在 2021/3/3 17:18:07 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |