一个简易的心跳包 C# Socket (上)

是这样的,想请问一下,一个简易的心跳包 C# Socket (上)
最新回答
咱狠自私

2024-11-07 04:37:12

貌似 都注释上了没啥好说的, NowTimeSpan => Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds); 这个就是一个只读的写法,每次读取都会读现在的时间与默认的时间差距秒,从而去计算心跳包的秒数
InitMax()就是初始化上限数值 超时次数 超时上限
UpdateHeat()就是更新心跳包的 重新赋值当前与默认时间的差距秒数, 如果过段时间不更新不更新当前持有的秒数也不会更新 在CheckHeat()检测超过限定的超时时间MaxLostTime 就是增加一次Lostcount超时次数

KGHeartBeatManage<T,R>:IDisposable where R:KGHeartBeat 这里的T就是你们定义的每个会话管理类,R就是指定要继承KGHeartBeat 的

初始化事件 InitTimerEvent(第一个委托就是发送事件,第二个委托就是 每个心跳包如果超时就会回调回来,每隔多少毫秒触发一次检测,每隔多少毫秒发送心跳包)
然后StartTimer()就可以开始触发了
这边定时器那里加了个每次都会检测ConnectDic字典里面储存的心跳包,如果超过最大上限超时次数就会回调 KGHeartBeatManage里面的第二个委托,告诉他这个连接已经超时,

AddConnectDic(对应的会话管理类,指定超时时间,超时次数)这里会创建出对应的KGHeartBeat数据里存在字典里面,每个会话管理对应一个心跳包数据
RemoveConnectDic(T obj) 这里是移除字典里面 该会话管理对应的心跳包

因为会有多线程触发的问题这里用了lock互斥锁,排队来,

https://github.com/LKaiGuo/KGScriptGenerator
喜欢的给我点个星星啊
u3d萌新QQ群844087555 欢迎进来灌水=。=