Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7093402
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: 架构设计与优化

2013-12-05 10:16:39

1、TCP协议自带的心跳keepalive
TCP协议的实现中,有心跳机制的实现
操作:
    setsockopt(handle, SOL_SOCKET, SO_KEEPALIVE, aliveValue);
功能:
    每隔固定时间发送probe包,等待接收ack

缺点:
     1、无法回返应用层,只是应用层在执行socket调用的时候,会返回错误

2、应用层心跳 keepalive
应用系统自己实现的心跳机制
功能:
    固定时间间隔向对端发送probe包,等待接收ack

特点:
    1、能够判断对端的网络现状:良好连接或者断线
    2、能够判断对端应用层运行状况


3、应用层心跳实现要点:
    1、心跳发送与业务逻辑同一个线程(实际上,只要心跳发送线程与网络线程是同一个线程,足以满足)
    2、心跳发送与业务逻辑同一个网络连接
    3、心跳检查的结果应回调给应用层
    4、心跳发送的频率应可以设置:在移动端的心跳实现中,心跳频率达到一定程度,会影响终端的耗电量

几个重要问题:
1、为什么分布式系统必须实现应用层的心跳机制,而不使用TCP协议中的keepalive机制?
如上,TCP keepalive机制与应用层keepalive机制的特点决定的

2、发送间隔、检查间隔、超时时长应该设置为多少,才是最合适的?
根据场景不同,指标也不一样。没有固定的数值
如下样本:
    发送间隔10,检查间隔1:
    发送间隔1,检查间隔10:
    发送间隔10,检查间隔10:
    发送间隔10,检查间隔20:
    发送间隔20, 检查间隔10:

3、为什么应用层心跳不要用单独一个线程来执行?
应用层心跳发送用单一线程,只能反映网络连接的情况,不能够反映发送者当前业务线程的运行情况,如线程阻塞等
但应用层心跳发送也不是一定要与业务逻辑同一个线程,我认为与网络线程在同一个线程即可,但网络线程需有办法知道业务各线程的

4、为什么应用层心跳要跟业务消息共享同一个网络连接?
不使用同一个连接,心跳机制就没有实际意义

阅读(520) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~