[发明专利]一种发送心跳包维持长连接的方法有效
申请号: | 201310747400.4 | 申请日: | 2013-12-31 |
公开(公告)号: | CN103716323B | 公开(公告)日: | 2016-11-30 |
发明(设计)人: | 严伯盛;林飞达;黄礼锋 | 申请(专利权)人: | 厦门悦讯信息科技有限公司 |
主分类号: | H04L29/06 | 分类号: | H04L29/06 |
代理公司: | 厦门市新华专利商标代理有限公司 35203 | 代理人: | 朱凌 |
地址: | 361000 福建省厦*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 发送 心跳 维持 连接 方法 | ||
1.一种发送心跳包维持长连接的方法,其特征在于:包括如下步骤:
步骤一:打开keepAlive开关,设置keepAlive参数,具体包括:
客户端:
步骤A1:建立TCP Socket客户端;
步骤A2:打开SO_KEEPALIVE选项;
步骤A3:设置TCP_KEEPIDLE 为心跳包间隔周期;
步骤A4:设置TCP_KEEPINTVL为s秒;
步骤A5:设置TCP_KEEPCNT为n次;
步骤A6:开始阻塞式读写;
服务端:
步骤B1:建立TCP Socket服务端;
步骤B2:选用异步非阻塞读写;
步骤B3:处理正常业务逻辑,不处理心跳包代码;
步骤二:客户端TCP的保活计时器开始工作,如果在保活计时器到期之前没有发生有效数据传输,工作在系统的内核空间的客户端TCP协议栈自动向服务端发起一个keep-alive packet ,该 keep-alive packet 就是 ACK 和当前TCP 序列号减一的组合,此时根据网络的不同情况,会出现正常情况、网络异常或服务端异常、服务端曾经中断后重启三种处理流程:
如果是正常情况,转入步骤C1:
步骤C1:客户端向服务端发起keepAlive 探测包;
步骤C2:服务端收到keepAlive 探测包;
步骤C3:服务端发出ACK回复包;
步骤C4:客户端收到ACK回复包;
步骤C5:客户端保活计时器重新开始计时,进入下一次循环;
如果是网络异常,或服务端异常,转入步骤D1:
步骤D1:客户端向服务端发起keepAlive 探测包;
步骤D2:经过TCP_KEEPINTVL设定的时间后客户端未收到回复,再次发出keepAlive 探测包,重复TCP_KEEPCNT设定的次数;
步骤D3:客户端一直未收到ACK回复包,引起 SOCKET_ERROR;
步骤D4:内核空间向用户空间提交 SOCKET_ERROR;
步骤D5:用户空间应用程序检测到 SOCKET_ERROR, recv 函数返回 SOCKET_ERROR,WSAGetLastError()得到的结果为WSAECONNRESET(10054) ,重新建立新SOCKET与服务端连接;
如果是服务端曾经中断后重启,转入步骤E1:
步骤E1:客户端向服务端发起keepAlive 探测包;
步骤E2:服务端收到keepAlive 探测包;
步骤E3:服务端发出RST标志复位回复包;
步骤E4:客户端收到RST标志复位回复包 ;
步骤E5:客户端发起SocketException:远程主机强迫关闭了一个现有的连接错语,关闭当前socket;
步骤E6:客户端内核空间向用户空间的用户程序提交SocketException;
步骤E7:用户空间应用程序检测到SocketException ,重新建立新的SOCKET与服务端连接。
2.如权利要求1所述的一种发送心跳包维持长连接的方法,其特征在于:所述步骤A4中的s为5;所述步骤A5中的n为2。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于厦门悦讯信息科技有限公司,未经厦门悦讯信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310747400.4/1.html,转载请声明来源钻瓜专利网。