LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Socket之心跳包实现思路

admin
2021年3月3日 17:18 本文热度 3467

由于最近要做一个客户端,但是要求有一个掉线检测的功能,下面让我们看看使用自定义的HeartBeat方式来检测客户端的连接情况。

心跳包的实现思路:

客户端连接上服务端后,在服务端会维护一个在线客户端列表。客户端每隔一段时间,向服务端发送一个心跳包,服务端受收到包以后,会更新客户端最近一次在线时间。一旦服务端超过规定时间没有接收到客户端发来的包,则视为掉线。

代码:

客户端每隔一段时间,发送一个心跳包:

var timer = new System.Timers.Timer();

timer.Interval = 60000;  //1m触发一次

timer.Start();

timer.Elapsed += (sender, args) =>

{

   Console.WriteLine("开始发送心跳包");

   MMessage message = new MMessage();

   message.MessageType = MessagePicks.Heartbeat;

   // message.From = loginName;

  WriteToStream(message);

};


服务端每隔一段时间检测:

var timer = new Timer();

timer.Interval = 60000;  //1m触发一次

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);

    }

};


服务端收到心跳包的处理逻辑:

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 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved