一种数据通信续接方法及装置
技术领域
本发明涉及网络通信技术领域,具体说是一种数据通信续接方法及装置。尤指网络故障或网络切换时客户端和服务器之间的数据通信续接方法及采用该方法的数据通信续接装置。
背景技术
目前有很多设备具有多种联网方式,例如:4G手机、平板电脑、笔记本电脑、台式机、网络打印机等设备,可选用的联网方式分为有线联网方式和无线联网方式,包括但不限于:移动数据(包括2G、3G、4G)、WIFI(包括2.4G、5G)、蓝牙、宽带(ADSL、光纤、ISDN)、拨号上网。
此类具有多种联网方式的设备,当其需要从一种联网方式切换到另一种联网方式(即网络切换)时,例如:以手机为例,当从室外回到室内,手机从4G移动数据联网方式切换到2.4G WIFI联网方式时,手机中的应用程序需要重新进行初始化网络连接(初始化网络连接需要复杂的网络通信),否则手机中的应用程序不能正常联网运行,会提示初始化网络连接失败,这导致应用程序的开发者需要付出额外的开发工作量,增大了开发成本,提高了开发工作的复杂程度,降低了开发效率。
同时,此类具有多种联网方式的设备作为客户端,和服务器重新进行初始化网络连接时,需要用户确认此操作,如用户不确认则可能导致设备中的、需要使用网络的应用程序自动退出或无法正常运行,这导致用户体验较差。例如:以手机为例,某用户在手机上玩需要使用网络以连接服务器的在线游戏,当地铁从地面运行至地下时,4G移动数据联网方式失去信号,导致网络断开(网络故障中的一种典型情况)或手机自动进行网络切换,则该在线游戏为了能正常运行,要么需要用户确认进行初始化网络连接(重新联网),要么需要用户确认进行重新登录(重新联网+身份认证),否则用户只能退出游戏重新进入。有时,由于网络稳定性不佳(网络故障中的一种典型情况),即便用户确认了重新进行初始化网络连接,也依然可能导致应用程序卡死或操作不正常,用户不得不退出并重新进入应用程序。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种数据通信续接方法及装置,当发生网络故障或发生网络切换时,能简化客户端和服务器间的网络通信,用户体验好,减少了应用程序的开发者的开发工作量。
为达到以上目的,本发明采取的技术方案是:
一种数据通信续接方法,其特征在于:客户端与服务器建立网络通信后,客户端启用数据通信续接功能,
客户端接收服务器发送的连接存根数据,在客户端本地存储连接存根数据形成第一校验凭证;所述第一校验凭证用于当发生网络故障或发生网络切换时,恢复客户端和服务器间的网络通信;所述连接存根数据记录有客户端和服务器间的物理连接的数据信息;
当客户端发现网络故障或网络切换时,客户端成功通过新的网络连接服务器后,客户端发起数据通信续接,且客户端向服务器发送第一校验凭证用于客户端验证或用于网络连接验证。
在上述技术方案的基础上,客户端直接在本地存储连接存根数据,形成所述第一校验凭证。
在上述技术方案的基础上,客户端初始化完成后,当客户端的应用程序请求网络连接,以访问服务器时,客户端开始启用数据通信续接功能。
在上述技术方案的基础上,客户端开始启用数据通信续接功能时,
客户端向服务器发送特征数据包;
客户端接收服务器发送的对应于特征数据包的有效应答;
客户端向服务器发送第一次连接指令;
客户端接收服务器发送的连接存根数据;
客户端通知请求网络连接的应用程序网络连接成功,并启用数据通信续接功能。
在上述技术方案的基础上,当客户端发现网络故障或网络切换时,客户端需判断是否有需要向服务器发送的待发数据,
如果有,则缓存待发数据;
在恢复客户端和服务器间的网络通信后,再将缓存待发数据向服务器发送。
在上述技术方案的基础上,客户端发起数据通信续接的方式为:
客户端向服务器发送特征数据包;
客户端接收服务器发送的对应于特征数据包的有效应答;
客户端向服务器发送数据通信续接指令及第一校验凭证;
客户端接收服务器发送的更新的连接存根数据,在客户端本地存储更新的连接存根数据形成第一校验凭证。
在上述技术方案的基础上,所述特征数据包具体包含以下内容:
起始数据,为一段固定的数据,且该段固定的数据为一段不容易重复的数据,表示开始进行数据通信续接功能相关的数据交互,
版本数据,表示数据通信续接功能的版本。
在上述技术方案的基础上,所述第一次连接指令,表示第一次开始建立数据通信续接功能。
一种数据通信续接方法,其特征在于:服务器与客户端建立网络通信后,服务器确认客户端启用数据通信续接功能,
服务器生成连接存根数据,并向客户端发送连接存根数据,服务器在本地存储连接存根数据形成第二校验凭证;所述第二校验凭证用于当发生网络故障或发生网络切换时,恢复客户端和服务器间的网络通信;所述连接存根数据记录有客户端和服务器间的物理连接的数据信息;
当服务器发现网络故障时,服务器将第二校验凭证存储至重连等待表,启动定时器,等待客户端发起数据通信续接;
服务器响应客户端发起的数据通信续接,且服务器接收客户端发送的第一校验凭证,根据第一校验凭证查找对应的第二校验凭证,并关闭与该第二校验凭证对应的定时器,根据第一校验凭证恢复客户端和服务器间的网络通信。
在上述技术方案的基础上,服务器维护一存根数据表,在存根数据表中存储连接存根数据,形成所述第二校验凭证。
在上述技术方案的基础上,服务器初始化完成后,服务器处于监听和等待客户端发送的数据包的状态;
当服务器收到客户端发送的特征数据包时,服务器开始相应数据通信续接相关操作。
在上述技术方案的基础上,服务器开始响应数据通信续接相关操作时,
服务器接收客户端发送的特征数据包;
服务器向客户端发送对应于特征数据包的有效应答;
服务器接收客户端发送的第一次连接指令;
服务器向客户端发送连接存根数据。
在上述技术方案的基础上,服务器将第二校验凭证存储至重连等待表的方式为:
当有需要向客户端发送的待发数据时,服务器根据待发数据查找对应的客户端,
再根据客户端查找对应的第二校验凭证,
最后服务器将第二校验凭证存储至重连等待表;
或:
服务器根据网络故障判断影响到哪些客户端,再根据客户端查找对应的第二校验凭证,最后服务器将第二校验凭证存储至重连等待表;
或:
当服务器发现网络故障时,将所有第二校验凭证均存储至重连等待表。
在上述技术方案的基础上,如果定时器超时,则服务器进行第二校验凭证清理,
具体内容为:
从重连等待表中清除第二校验凭证,
从存根数据表中清除第二校验凭证,
通知服务程序连接断开。
在上述技术方案的基础上,服务器响应客户端发起的数据通信续接的方式为:
服务器接收客户端发送的特征数据包;
服务器向客户端发送对应于特征数据包的有效应答;
服务器接收客户端发送的数据通信续接指令及第一校验凭证;
服务器根据第一校验凭证查找重连等待表,找到重连等待表中对应的第二校验凭证后,从重连等待表中清除第二校验凭证,并关闭对应的定时器;
服务器根据第一校验凭证查找存根数据表,找到存根数据表中对应的第二校验凭证后,服务器生成更新的连接存根数据,并向客户端发送更新的连接存根数据,服务器在本地存储更新的连接存根数据形成第二校验凭证。
一种数据通信续接装置,其特征在于,包括:
客户端,部署有虚拟连接模块,用于在客户端的物理网卡与客户端的应用程序之间建立连接桥梁,
服务器,部署有虚拟连接模块,用于在服务器的物理网卡与服务器的服务程序之间建立连接桥梁,
客户端的虚拟连接模块和服务器的虚拟连接模块,通过交互数据完成以下内容:
1、客户端和服务器间建立网络通信,并启用数据通信续接功能;
2、当服务器发现网络故障时进行预处理操作并等待客户端发起数据通信续接;
3、当客户端发现网络故障或网络切换时发起数据通信续接;
上述内容1、2、3按上述方法实施。
本发明所述的数据通信续接方法及装置,当发生网络故障或发生网络切换时,能简化客户端和服务器间的网络通信,用户体验好,减少了应用程序的开发者的开发工作量,网络故障或网络切换对客户端及客户端中的应用程序的影响小。
附图说明
本发明有如下附图:
图1数据通信续接装置架构图;
图2客户端和服务器间启用数据通信续接功能流程图;
图3客户端和服务器间通过数据通信续接功能快速恢复网络通信流程图。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细说明。
如图2、3所示,本发明所述的数据通信续接方法,客户端和服务器开机后分别进行初始化,其中:服务器初始化完成后,处于监听和等待客户端发送的数据包的状态。
客户端初始化完成后,当客户端的应用程序请求网络连接,以访问服务器时,客户端开始启用数据通信续接功能。启用数据通信续接功能的目的是当发生网络故障或发生网络切换时,可以利用该功能恢复客户端和服务器间的网络通信,使应用程序尽可能的不受网络故障或网络切换的影响,不丢数据包,无需重新进行初始化网络连接,使得应用程序可以尽可能少的考虑发生网络故障或发生网络切换时的处理,提高网络可用性的同时,减少应用程序开发的工作量。为了确保启用数据通信续接功能,以下问题应该加以注意。
第一,客户端开始启用数据通信续接功能前,客户端先判断当前网络能否连接到服务器;
如果当前网络(当前联网方式)不能连接到服务器,客户端通知请求网络连接的应用程序连接失败,结束。
更进一步,如果当前网络不能连接到服务器,客户端亦可尝试进行网络切换,当所有已知网络都不能连接到服务器,客户端通知请求网络连接的应用程序连接失败,结束。另外,如果已知网络(已知联网方式)均被禁止使用,客户端可直接通知请求网络连接的应用程序连接失败,无需进行连接尝试。
启用数据通信续接功能的首要条件之一是客户端与服务器建立网络通信,因此,当客户端不能连接到服务器,是不能启用数据通信续接功能的。
第二,客户端开始启用数据通信续接功能前,客户端先判断应用程序是否允许启用数据通信续接;
如果应用程序不允许启用数据通信续接,客户端通知请求网络连接的应用程序网络连接成功,但不启用数据通信续接,结束。
并非所有应用程序都需要使用本发明所述数据通信续接功能,因此,最好为应用程序设置一选择功能,通过应用程序的选择功能可以自行选择是否允许启用数据通信续接,以提高兼容性和易用性,为用户提供操作便利,也能提高算法的执行效率。
客户端开始启用数据通信续接功能时,
客户端向服务器发送特征数据包;
客户端接收服务器发送的对应于特征数据包的有效应答;
客户端向服务器发送第一次连接指令;
客户端接收服务器发送的连接存根数据;
客户端通知请求网络连接的应用程序网络连接成功,并启用数据通信续接功能。
相应的,服务器开始响应数据通信续接相关操作(指响应开始启用数据通信续接功能)时,
服务器接收客户端发送的特征数据包;
服务器向客户端发送对应于特征数据包的有效应答;
服务器接收客户端发送的第一次连接指令;
服务器向客户端发送连接存根数据。
需要说明的是:
第一,当服务器收到客户端发送的特征数据包时,服务器才开始相应数据通信续接相关操作,即:特征数据包是在告知服务器后面的相应指令、数据包是与数据通信续接相关的,这在启用数据通信续接功能、在通过数据通信续接恢复客户端和服务器间的网络通信时,均是如此,要先发送特征数据包,然后才发送相应的指令、数据包,这样做的优点是:可以和现有技术并存且不影响现有技术的实施;
所述特征数据包具体包含以下内容:
起始数据,32个字节,为一段固定的数据,且该段固定的数据为一段不容易重复的数据,例如:起始数据可以为:"!*#FASTRELINKFABBCCCDDDEEEEJJJJJ",表示开始(请求)进行数据通信续接功能相关的数据交互,
版本数据,2个字节,表示数据通信续接功能的版本。
第二,所述第一次连接指令为:32个字节的起始数据+指令编号,表示第一次开始建立数据通信续接功能;
例如:第一次连接指令可以如下:
"!*#FASTRELINKFABBCCCDDDEEEEJJJJJ"+0x0001。
第一次连接指令可根据需要自行定义,此处仅为示例;
第三,所述连接存根数据具体包含以下内容:
存根数据ID,4个字节,服务器生成的、具有唯一性的数据;
客户端生成的数据A,4个字节,通过客户端向服务器发送的初始化数据包获得,没有则全0填充;
物理连接的数据信息,指物理网卡的必要数据,例如:至少包括连接的套接字(源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字Socket)。
第四,客户端发送第一次连接指令给服务器,服务器就可以生成并向客户端发送连接存根数据,此时,连接存根数据中的客户端生成的数据A全0填充(即:当客户端未向服务器发送客户端生成的数据A时,连接存根数据中的客户端生成的数据A全0填充)。后续通过数据通信续接恢复客户端和服务器间的网络通信时,服务器仅通过存根数据ID确认以下信息的合法性:
客户端,网络连接,连接存根数据。
第五,作为更加安全可靠的优选方案,客户端向服务器发送客户端生成的数据A的具体方式为:
客户端向服务器发送第一次连接指令时,客户端还向服务器发送初始化数据包,
初始化数据包是用于标识客户端第一次通过当前网络与服务器连接的数据包,
初始化数据包具体包含以下内容:
起始数据,2个字节,为一段固定的数据0x0001,
客户端生成的数据A(简称为数据A),4个字节,为具有唯一性的数据,
结束数据,4个字节,为一段固定的数据0x00000000。
数据A的生成方式为:客户端自己指定的一段数据,例如可以是一段固定的随机数0x12344555,也可以是采用算法生成的具有唯一性的数据。
数据A的作用是出于安全性的考虑:
在进行数据通信续接时,数据A用于唯一标识客户端,服务器接收客户端发送过来的数据A,并和服务器中存储的初始化数据包发送过来的数据A进行对比,如果一致,则表示开始(请求)进行数据通信续接功能相关的数据交互的客户端,是发送初始化数据包的客户端,避免客户端被冒名顶替;
或在进行数据通信续接时,数据A用于唯一标识一条网络连接,数据通信续接功能可以是面向网络连接的,此种情况下,每一条网络连接都有与之对应的数据A(还可进一步包括存根数据ID),每一条网络连接都使用自己的数据A(还可进一步包括存根数据ID)开始(请求)进行数据通信续接功能相关的数据交互,互相之间没有干扰,也没有任何逻辑关系。
考虑到数据A在客户端生成,理论上存在重复的可能性(例如被恶意伪造等情况,再例如多个客户端自己指定的一段数据恰好相同等情况),当数据A不足以唯一标识客户端,或不足以唯一标识一条网络连接,则最好采用数据A联合存根数据ID的方式,以确保能唯一标识客户端或唯一标识一条网络连接,存根数据ID由服务器生成,不存在重复的情况,安全性更佳,可有效避免出现重复的可能性。
第六,启用数据通信续接功能是否成功完成,需要一个判断依据,所述连接存根数据作为成功启动数据通信续接功能的凭证。
客户端接收服务器发送的连接存根数据,在客户端本地存储连接存根数据形成第一校验凭证,所述第一校验凭证用于当发生网络故障或发生网络切换时,恢复客户端和服务器间的网络通信,
服务器生成连接存根数据,并向客户端发送连接存根数据,服务器在本地存储连接存根数据形成第二校验凭证,所述第二校验凭证用于当发生网络故障或发生网络切换时,恢复客户端和服务器间的网络通信,
实际上,第一校验凭证和第二校验凭证内容是相同的,都是连接存根数据,只不过一个存在客户端,另一个存储在服务器,连接存根数据记录了服务器为客户端或为网络连接分配的存根数据ID,其中:
客户端直接在本地存储连接存根数据,形成所述第一校验凭证。
服务器维护一存根数据表,在存根数据表中存储连接存根数据,形成所述第二校验凭证。
当客户端发现网络故障或网络切换时,客户端需判断是否启用数据通信续接,
如果未启用数据通信续接,客户端通知应用程序连接断开,结束。否则:
当客户端发现网络故障或网络切换时,客户端成功通过新的网络连接服务器后,客户端发起数据通信续接,且客户端向服务器发送第一校验凭证用于客户端验证或用于网络连接验证。另外,如果新的网络不能连接到服务器,则客户端通知应用程序连接断开,结束。
当服务器发现网络故障时,服务器将第二校验凭证存储至重连等待表,启动定时器,等待客户端发起数据通信续接;
服务器响应客户端发起的数据通信续接,且服务器接收客户端发送的第一校验凭证,根据第一校验凭证查找对应的第二校验凭证,并关闭与该第二校验凭证对应的定时器,根据第一校验凭证恢复客户端和服务器间的网络通信。
需要说明的是,为了确保数据包不因为网络故障或网络切换丢失,确保数据通信续接的可靠性,客户端和服务器均需要对待发数据的保护,其中:
当客户端发现网络故障或网络切换时,客户端需判断是否有需要向服务器发送的待发数据,
如果有,则缓存待发数据;
在恢复客户端和服务器间的网络通信后,再将缓存待发数据向服务器发送。
当服务器发现网络故障时,服务器需判断是否有需要向客户端发送的待发数据,
如果有,则缓存待发数据;
在恢复客户端和服务器间的网络通信后,再将缓存待发数据向客户端发送。
在服务器端,当服务器发现网络故障后,服务器还有以下预处理操作:
服务器将第二校验凭证存储至重连等待表的方式为:
当有需要向客户端发送的待发数据时,服务器根据待发数据查找对应的客户端,
再根据客户端查找对应的第二校验凭证,
最后服务器将第二校验凭证存储至重连等待表;
或:
服务器根据网络故障判断影响到哪些客户端,再根据客户端查找对应的第二校验凭证,最后服务器将第二校验凭证存储至重连等待表;
或:
当服务器发现网络故障时,将所有第二校验凭证均存储至重连等待表。
为了避免对存根数据表的误操作,第二校验凭证存储至重连等待表,启动定时器,等待客户端发起数据通信续接。
存根数据表和重连等待表的区别可以理解为:未断开的连接(可能是虚假的连接)对应的第二校验凭证存储在存根数据表,已断开的连接对应的第二校验凭证存储在重连等待表,对这两个表的检索、处理,相当于梳理已断开和未断开的连接。
如果定时器超时,则服务器进行第二校验凭证清理,
具体内容为:
从重连等待表中清除第二校验凭证,
从存根数据表中清除第二校验凭证,
通知服务程序连接断开。
进行连接存根数据清理后,重连等待表对应的已断开的网络,和存根数据表对应的未断开的网络,均被清理,客户端再次请求网络连接则按第一次连接处理。
客户端发起数据通信续接的方式为:
客户端向服务器发送特征数据包;
客户端接收服务器发送的对应于特征数据包的有效应答;
客户端向服务器发送数据通信续接指令及第一校验凭证;
客户端接收服务器发送的更新的连接存根数据,在客户端本地存储更新的连接存根数据形成第一校验凭证。
服务器响应客户端发起的数据通信续接的方式为:
服务器接收客户端发送的特征数据包;
服务器向客户端发送对应于特征数据包的有效应答;
服务器接收客户端发送的数据通信续接指令及第一校验凭证;
服务器根据第一校验凭证查找重连等待表,找到重连等待表中对应的第二校验凭证后,从重连等待表中清除第二校验凭证,并关闭对应的定时器;
服务器根据第一校验凭证查找存根数据表,找到存根数据表中对应的第二校验凭证后,服务器生成更新的连接存根数据,并向客户端发送更新的连接存根数据,服务器在本地存储更新的连接存根数据形成第二校验凭证。
如前所述,发起数据通信续接也需要先发送特征数据包,特征数据包表示这个新的物理连接采用了本技术,续接的时候必须首先发送,服务器上新生成了一个物理连接,服务器要依据这个特征数据包是否被正确的接收来决定采不采用本技术。服务器上可能有很多的网络服务,有的网络服务需要采用本技术,另外一些网络服务则没必要采用本技术,本技术不能对其他网络连接产生干扰。
作为更加安全可靠的优选方案,客户端向服务器发送数据通信续接指令及第一校验凭证时,还发送续接数据包,以标识这个连接是客户端续接的数据包,
续接数据包具体包含以下内容:
起始数据,2个字节,为一段固定的数据0x0100,
客户端生成的数据A,4个字节,
结束数据,4个字节,为存根数据ID。
服务器通过续接数据包确认以下信息的合法性:
客户端,网络连接,连接存根数据。
续接数据包结合连接存根数据,可为服务器确认客户端或确认网络连接提供足够的数据,有效确保数据通信续接的安全性和数据通信续接的准确性;其中:
连接存根数据可用于查找重连等待表,可用于查找存根数据表,
续接数据包可供服务器确认客户端或确认网络连接,可确认连接存根数据的完整性。
更进一步,客户端向服务器发送第一校验凭证的具体方案有以下几种:
方案1,客户端仅向服务器发送第一校验凭证;
方案2,客户端向服务器发送数据通信续接指令及第一校验凭证;
方案3,客户端向服务器发送数据通信续接指令、第一校验凭证及续接数据包;
方案3作为优选方案,安全性更佳。
本发明还给出了一种数据通信续接装置,如图1所示,包括:
客户端,部署有虚拟连接模块,用于在客户端的物理网卡与客户端的应用程序之间建立连接桥梁,
服务器,部署有虚拟连接模块,用于在服务器的物理网卡与服务器的服务程序之间建立连接桥梁,
客户端的虚拟连接模块和服务器的虚拟连接模块,通过交互数据完成以下内容:
1、客户端和服务器间建立网络通信,并启用数据通信续接功能;
2、当服务器发现网络故障时进行预处理操作并等待客户端发起数据通信续接;
3、当客户端发现网络故障或网络切换时发起数据通信续接;
上述内容1、2、3的具体步骤参见前述。
虚拟连接模块的部署,减少了应用程序的开发者的开发工作量,数据通信续接功能的启用、数据通信续接的具体处理可由客户端和服务器上的虚拟连接模块处理、完成,使数据通信续接功能可独立控制,可按需选择是否启用。
客户端和服务器中的虚拟连接模块,还需要考虑不采用本技术进行通信的网络连接。对于没有采用本技术的客户端或网络连接,也应该进行正常的支持,本技术应该可以和现有技术并存且不影响现有技术的实施。例如:
未采用数据通信续接的数据包,首先不会由特征数据包引导,故虚拟连接模块可直接将此类数据包透传给物理网卡或应用程序或服务程序进行解析、处理;
收到特征数据包时:
物理网卡如果首先收到特征数据包,则将特征数据包以及后续数据包转发给虚拟连接模块处理,直到虚拟连接模块通知物理网卡相应的处理操作结束。
虚拟连接模块如果首先收到特征数据包,则直接对特征数据包以及后续数据包进行处理,直到相应的处理操作结束。
在上述技术方案的基础上,所述虚拟连接模块为虚拟网卡或网络驱动模块。
采用虚拟网卡,不但可以实现本发明所述技术方案,还可以实现对物理网卡功能的模拟,更有利于提高算法效率,有利于处理过程的监控、管理。
采用网络驱动模块,以硬件和驱动程序相结合的方式实现本发明所述技术方案,更有利于算法的稳定、高效运行。
在上述技术方案的基础上,客户端的应用程序能自行设定允许或禁止客户端的虚拟连接模块和服务器的虚拟连接模块之间交互数据。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。