怎么设计心跳测试?

dclchj 2010-07-10 04:59:39
  我在写一个C/S程序,服务器端为MFC程序,用IOCP(完成端口)技术完成。所有接收到的连接都写入一个链表。

  现在需要对链表内的地址进程测试,去除定时无响应的主机。

  但是我不知道该怎么设计心跳测试。

  我的方案是:
  (服务器端)
  1。服务器端建一个线程作为心跳测试线程,清除链表B和链表C的内容。
  2。建一个循环,首先复制当前链表A(上线的主机)中内容进链表B,然后依次向其中的地址发送测试包,然后Sleep 5秒,然后在链表C(IOCP线程中收到客户端回应的心跳测试后,写入链表C)中寻找链表B的每一项,如果找到则不处理,找不到则A链表中该项删除。
  

  (客户端)
  1。进入循环,直到连接上服务器。
  2。设置ONtime消息,设置变量tt值为0。
  3。在收到服务器端的心跳包后回复,tt++。
  4。处理ONtime消息,如果tt值小于某值,则回到1,同时tt = 0;否则重复2-4。

  不知道有没有更好的方案,特别是一些远控软件是怎么设计它的?
...全文
366 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dclchj 2010-07-11
  • 打赏
  • 举报
回复
决定用2楼的方法,谢谢大家指点!
zohan 2010-07-10
  • 打赏
  • 举报
回复
服务器用户节点设置一个计时器,每10秒遍历一次并将计数器增1,客户端每20秒定时发心跳包到服务器,服务器收到心跳包就把定时器清0.设置参数,计数器超过多少时候认为连接已经无效删除用户节点。
CppFile 2010-07-10
  • 打赏
  • 举报
回复
可以让客户端定时发送心跳包,服务器接受,并记录接受时间,然后再服务器上开一个timer,定时检测所有的客户端的最近一次的心跳包接受时间,如果和当前时间相差大于10秒的,就认为是失效的连接
xgPaul 2010-07-10
  • 打赏
  • 举报
回复
用定时器定时遍历客户端链表,给每个客户端发送一个心跳包,如果客户端没有回发确认心跳包,则认为客户端断开。。。
liyinlei 2010-07-10
  • 打赏
  • 举报
回复
服务器端为每个客户端连接设定一个计数(比如60)

定时(比如2秒)遍历客户端链表,将计数减2,如果计数为0了,则认为该客户端已经over了,删除之。

定时(比如20秒)给客户端发送心跳包,客户端收到后给服务端应答,服务端收到客户端的应答后将对应客户端的计数恢复为60.

可以根据需要,改变计数和定时周期,达到改变判断客户端失效的时间。

来灵 2010-07-10
  • 打赏
  • 举报
回复
在服务端用timeSetEvent开一个定时器,每隔固定时间(比如15秒)向客户端发送心跳请求包,当客户端收到后,发送心跳应答包,如此循环。若服务端连续3次没有收到客户端的心跳应答包,则可判断客户端已经挂掉

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧