一种tcp连接资源的释放方法及系统的制作方法

文档序号:9870360阅读:570来源:国知局
一种tcp连接资源的释放方法及系统的制作方法
【技术领域】
[0001]本发明涉及通信技术领域,特别涉及一种TCP连接资源的释放方法及系统。
【背景技术】
[0002]在互联网领域,TCP(Transfer Control Protocol,传输控制协议)协议的应用相当广泛,大部分的C/S服务端模型采用TCP连接进行可靠的通讯。即使Web应用采用Http协议,但其也离不开TCP协议,因为Http协议是应用层协议,其底层的实现还是依赖于TCP协议。TCP通讯两端的SOCKET连接是由一个四元组唯一确定的,即{终端IP,终端端口,服务端IP,服务端监听端口}。服务端,通常其IP及监听端口在服务过程中是不变的,不同终端的IP及端口是不一样的。作为服务端需要给大量的用户提供服务,在服务的过程中,服务端与客户端需要保持TCP连接,从而服务端需要具备较多的系统资源。虽然随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,但是资源毕竟是有限的,如可用连接端口数。如何更好地快速回收资源,给客户端提供更稳定的更快的服务,是衡量一个服务端是否高效、可用的标准。
[0003]在移动即时通讯以及物联网中,用户数相当庞大,且网络情况较为复杂不稳定,经常会出现突然间的断网的情况。而此时服务端维护着已经建立的TCP连接,TCP协议本身不能快速感知到连接中断。因为终端来不及发出Fin包,从而服务端会继续维护这个已断的连接,从而造成SOCKET资源不能马上释放。如果此时网络恢复正常,终端进行重连,终端系统随机分配的本地端口跟上一次连接使用的本地端口是一样的,将会出现TCP连接无法成功建立的情况,多次重连也会出现无法连接成功。因为此时服务端还未释放掉之前的SOCKET连接资源,在突然断电的时候,也会发生此类情况。对于服务端不能快速自动感知连接是否还活着的问题,通常终端会定时给服务端发送一个心跳包,设定一个心跳超时次数,服务端从而利用心跳检测来关闭那些长时间不活动僵死的连接,进而释放连接资源。但这个心跳间隔时长又不能设得很小,因为这会带来移动终端流量过多的问题,同时加重服务端的压力。如果心跳间隔时长较长,如终端每隔30秒发送一次心跳包给服务端,同时约定可以发生的超时次数,如果超时只有一次机会,这种作法会显得相当粗暴,因为网络中消息延迟是常有发生的事,很多时候网络只是拥堵些,并非出现异常失连问题;一般都有2次或3次超时机会,这样的话,那服务端至少要30 * 2 (或30 * 3)= 60 (或90)秒才会认为TCP连接异常,服务端此时才会主动关闭连接,但由于之前的终端连接已失效,此时TCP断开连接的四次握手过程将不能顺利完成,从而会导致还需要至少30秒的时间才能将原来的SOCKET连接完全释放掉。这里的30秒是TCP的Fin_waitl状态维持的最短时间,从而如果连接过程中出现断网断电时,服务端总共至少需要心跳时长*2(或3)+30的时间才能最终释放掉这个SOCKET连接资源。在此段时间中,终端随机分配的本地端口跟上一次连接相同的话,终端将会一直不能重新与服务端建立TCP连接,直至云端完全将那个SOCKET释放掉。且如果服务端服务的过程中出现了大量此类型的终端情况,将导致一段时间内大量的资源被占用而不能得到有效使用,造成服务端系统资源占用虚高。
[0004]因而现有技术还有待改进和提高。

【发明内容】

[0005]本发明要解决的技术问题在于,针对现有技术的不足,提供一种TCP连接资源的释放方法及系统,以解决现有应用TCP连接资源的释放方法中存在一段时间内大量的资源被占用而不能得到有效使用,造成服务端系统资源占用虚高的问题。
[0006]为了解决上述技术问题,本发明所采用的技术方案如下:
一种TCP连接资源的释放方法,其包括:
在终端与服务端建立TCP连接后,所述终端每间隔一段时间发送心跳包给所述服务端;若服务端第一预定时间内没有接收到终端发送的心跳包,则所述服务端向所述终端发送检测消息,其中所述第一预定时间大于心跳包间隔时间;
当所述服务端未接受到响应消息时,所述服务端释放所述终端占用的TCP资源,其中,所述响应消息为所述检测消息的响应消息。
[0007]所述TCP连接资源的释放方法,其中,所述方法还包括:
当所述服务端设备接收到响应消息时,所述服务器继续保持所述TCP连接,并记录所述接收心跳包超时次数,当累积超时次数超过预设阀值时,所述服务端释放所述终端占用的TCP资源。
[0008]所述TCP连接资源的释放方法,其中,终端与服务端建立TCP连接之前还包括: 所述终端选择连接端口,所述连接端口为与上一次连接记录的连接端口不同的可用端
□O
[0009]所述TCP连接资源的释放方法,其中,所述终端与服务端建立TCP连接后还包括: 所述终端记录本次连接的连接端口。
[0010]所述TCP连接资源的释放方法,其中,所述服务端未接受到响应消息具体为: 所述服务端发送检测消息失败或者第二预设时间内未接收到所述终端对所述检测消息的响应消息。
[0011]所述TCP连接资源的释放方法,其中,所述当服务端第一预定时间内没有接收到终端发送的心跳包,则所述服务端向所述终端发送检测消息,其具体为:
所述服务端启动用于判断接收终端发送心跳包是否超时的定时器,当定时器超时时,所述服务端向所述终端发送检测消息。
[0012]一种TCP连接资源的释放系统,其包括:
发送模块,用于在终端与服务端建立TCP连接后,所述终端每间隔一段时间发送心跳包给所述服务端;其中,所述第一预定时间大于心跳包间隔时间
接收模块,用于所述服务端接收所述终端发送的心跳包,并当服务端第一预定时间内没有接收到终端发送的心跳包时,向所述终端发送检测消息;
释放模块,用于当所述服务端未接受到响应消息时,所述服务端释放所述终端占用的TCP资源,其中,所述响应消息为所述检测消息的响应消息。
[0013]所述TCP连接资源的释放系统,其中,所述释放模块还用于:当所述服务端设备接收到响应消息时,所述服务器继续保持所述TCP连接,并记录所述接收心跳包超时次数,当累积超时次数超过预设阀值时,所述服务端释放所述终端占用的TCP资源。
[0014]所述TCP连接资源的释放系统,其中,其还包括:
选择模块,用于终端根据上一次连接时记录的连接端口,选择当前连接端口,其中,当前连接端口与上一次连接记录的连接端口不同。
[0015]所述TCP连接资源的释放系统,其中,所述选择模块还用于终端记录当前连接的连接端口。
[0016]有益效果:与现有技术相比,本发明所提一种TCP连接资源的释放方法及系统,在终端与服务端建立TCP连接后,所述终端每间隔一段时间发送心跳包给所述服务端;若服务端第一预定时间内没有接收到终端发送的心跳包,则所述服务端向所述终端发送检测消息;当所述服务端未接受到响应消息时,所述服务端释放所述终端占用的TCP资源,其中,所述响应消息为所述检测消息的响应消息。本方法中服务端无须再等达到2次或3次心跳超时才关闭连接,期达到尽快释放服务端无用连接资源的目的。同时,降低了在断网断电时终端重启后重新连接服务器失败的机率,加快终端的登录速率,给用户使用带来方便。
【附图说明】
[0017]图1为本发明TCP连接资源的释放方法较佳实施例的序列图。
[0018]图2为本发明TCP连接资源的释放方法较佳实施例的流程图。
[0019]图3为本发明TCP连接资源的释放方法另一个实施例的流程图。
[0020]图4为本发明TCP连接资源的释放系统的结构原理图。
[0021 ]图5为本发明TCP连接资源的释放装置的结构原理图。
【具体实施方式】
[0022]本发明提供TCP连接资源的释放方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0023]本发明中,所述终端设备指的是移动终端、智能电器等,例如,手机,电脑,智能电视等。
[0024]下面结合附图,通过对实施例的描述,对
【发明内容】
作进一步说明。
[0025]请参见图1和图2,所述TCP连接资源的释放方法,其包括:
S1、在终端与服务端建立TCP连接后,所述终端每间隔一段时间发送心跳包给所述服务端。
[0026]具体地,终端向服务端发送建立TCP连接的请求并进行账号认证后,终端与服务端建立TCP连接。当两者建立连接后,终端每间隔一段时间发送心跳包给服务端。所述间隔一段时间为系统预先设定的,所述间隔时间不能设得很小,因为这会带来移动终端流量过多的问题,同时加重服务端的压力。同时其也不能设置过大,将导致一段时间内大量的资源被占用而不能得到有效使用,造成服务端
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1