找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 13961|回复: 9

关于使用ACE实现心跳检测

  [复制链接]
发表于 2012-5-16 10:32:13 | 显示全部楼层 |阅读模式
为了处理客户端或服务端非优雅断开的情况,故自己添加心跳检测

自己的方案:
客户端每2s发送一次2个字节的数据包到服务端
服务端收到数据后回复一个数据包
若客户端10s内未收到一个回复包,则认为服务端断开.
若服务端10s内未收到一个心跳包,则认为客户端断开.

但是现在不知道如何在ACE reactor架构上实现UDP的服务器

大哥们,能不能给个实现的框架

谢谢了.
发表于 2012-5-16 12:14:07 | 显示全部楼层
怎么用UDP呢?不用TCP?
 楼主| 发表于 2012-5-16 12:45:35 | 显示全部楼层
winston 发表于 2012-5-16 12:14
怎么用UDP呢?不用TCP?

TCP有用来传其他数据.
网上说用TCP会对网络形成一定的压力,网络负载重些.

你能说说它们用来做心跳的区别吗?
发表于 2012-5-16 14:09:54 | 显示全部楼层
qq496683952 发表于 2012-5-16 12:45
TCP有用来传其他数据.
网上说用TCP会对网络形成一定的压力,网络负载重些.

一般还是用TCP做心跳的多,你无非多设置一条简单的协议报而已,调整好间隔,也谈不上什么压力。
UDP的主要问题,是会丢失。当UDP丢失的时候,你怎么确定是网络问题丢了报,还是链接断开呢?恐怕只能是判断时间长短了。

发表于 2012-5-16 14:17:33 | 显示全部楼层
实现UDP的心跳:
     1、定议好你的心跳的协议头,
     2、如果是傻瓜式的心跳,就定期的发送心跳头就行了,
     3、处理端收到后,按服务器还是客户端,决定更新最后一次的心跳时间或是返回心跳回应

TCP或UDP都是一样的实现,只是Reactor使用的底层的socket不同。不过如楼上所讲,TCP用得多一些。
 楼主| 发表于 2012-5-16 14:39:11 | 显示全部楼层
winston 发表于 2012-5-16 14:09
一般还是用TCP做心跳的多,你无非多设置一条简单的协议报而已,调整好间隔,也谈不上什么压力。
UDP的主 ...

哦.谢谢
用TCP的话是不是和ztenv版的流程一样.
最后认为连接断开是判断心跳的时间是否太久?
 楼主| 发表于 2012-5-16 14:39:31 | 显示全部楼层
ztenv 发表于 2012-5-16 14:17
实现UDP的心跳:
     1、定议好你的心跳的协议头,
     2、如果是傻瓜式的心跳,就定期的发送心跳头就行 ...

最后认为连接断开是判断心跳的时间是否太久?
发表于 2012-5-16 14:56:50 | 显示全部楼层
一般应用都足够了。对于特殊需求,再特殊设计。否则用UDP也有这个问题啊。
发表于 2012-5-16 19:48:38 | 显示全部楼层
qq496683952 发表于 2012-5-16 14:39
最后认为连接断开是判断心跳的时间是否太久?

不宜太长也不宜太短,根据网络情况来定吧,如果是局域网,设定5-30之内就行了,当然也要看 具体的需求的。
发表于 2013-7-24 15:34:15 | 显示全部楼层
不同的链路应该不能互相证明对方是好的,如果你要证明Tcp链路是否正常,应该只能由他自己来证明(能收到对方的包),其他链路是不是好的和这条链路应该没有必然的联系
况且心跳应该不会对应用造成压力

我之前实现的一个心跳是这样的:
1、本端保证每个5秒会发送一个包给对方,在本端做一个定时器,发现5秒了还没有发送数据给对方就发送一个空报文
2、定时检验对端是否在5秒内发送了报文过来,无论什么报文,只要有就认为对方还在。
这样的的好处:
1、在网络繁忙的时候,本端会发现不需要发送心跳报文过去,只有在闲时才会需要发送,避免拥堵网络
2、当网络繁忙的时候,如果有单独的心跳包,那么心跳包可能会被正常的数据包堵在后面,如现在正在传输一个10M的包,网络是好的,但是本端由于没有收到心跳包,错误的认为网络断开了,从而执行网络初始化的操作

希望对你有帮助
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-21 18:16 , Processed in 0.016911 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表