具体实施方式
下面将详细描述本发明的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本发明。
首先,本发明的技术构思在于,通过IPC进行点到点可靠通信的节点之间,存在有大量的会话;如果取代现有技术中针对每一个会话进行确认消息回复,而是对点到点之间IPC通信的全部会话采用统一的确认报文进行回复,或者说,接收方节点对于来自某发送方节点的所有不同种类的数据报文进行批量确认,将能够有效减少确认报文的数量,从而减少IPC带宽占用,提高发送端节点的处理效率。
为了实现本发明的技术构思,本发明的实施例提供了一种节点间通信确认机制的实现方法,适用于在发送端节点和接收端节点之间执行通信确认。
如图3所示,该节点间通信确认机制的实现方法实施例包括以下步骤:
步骤S1、对于接收到的各个会话的数据报文,接收端节点为其生成相应的确认信息并保存;
具体的,发送端节点和接收点节点之间存在着大量的会话,或者说,发送端节点和接收端节点通过IPC同时处理着不同种类的数据报文;对于每一个会话的数据报文而言,其按序排列;
本步骤S1提取并保存各个会话数据报文的确认信息,一般来说,可以包括该数据报文所属的会话ID(Session ID),该数据报文的控制标识以及该数据报文的序号,如图4所示;
通常情况下,对于IPC层面而言,所关注的仅是接收端节点是否有效接收到数据报文;因此,数据报文的控制标识一般包括ACK(Acknowledgment,确认)标识,即确认接收端节点已经有效接收该数据报文;其中,包括ACK标识的确认信息可以简称为ACK确认信息;
在实际应用中,为了向上层应用提供更多的参考信息,该控制标识可以进一步包括NACK(Negative Acknowledgment,否定确认)标识,用于确认接收端节点虽然有效接收到该数据报文但无法正确处理,比如由于内存溢出导致接收到的报文被丢弃等;其中,包括NACK标识的确认信息可以简称为NACK确认信息;
在接收端节点接收到NACK确认信息的情况下,就IPC层面而言无需启动重新发送机制,具体是否进行重新发送,由相应的上层应用决定;即使重新发送,对于IPC层面来说,也是新的数据报文,而非已有数据报文的重新发送;
同时,虽然对于IPC层面而言,ACK和NACK标识都表明接收端节点已经接收到相应的数据报文;但为了便于标识NACK的确认信息的优先处理,可以为标识NACK的确认信息设置较高的优先级。
步骤S2、当满足预设的确认条件时,接收端节点将所保存的确认信息封装到一个确认报文中,并发送给发送端节点;
本步骤S2是批量组装的过程。
其中,预设的确认条件可以包括:前一次确认报文发送后到达预设的时间间隔、前一次确认报文发送后接收到预设数目的数据报文或收到需要即时确认的数据报文;由于点到点通信存在大量会话,因此当满足预设的确认条件时,接收端节点往往已经积累了为不同会话数据报文生成的多个确认信息。
显然,上述步骤S1~S2通过将不同会话的确认信息封装在一个确认报文中,相对于为每一个会话在一定时机回复确认报文而言,可以有效减少确认报文的数量,进而减少IPC带宽占用,提高发送端节点的处理效率,有效节省节点间通信的开销。
在上述实施例中,进行封装的ACK确认信息可能存在重复确认的问题。
该问题出现的原因在于,对于节点间通信而言,发送端节点和接收端节点之间每一个会话的报文都是按序发送和接收的,当接收端节点收到序号不连续的报文时,将直接丢弃不加以处理和确认;比如,如果发送端节点通过一个会话发送序号分别为1、2、3、4和5的数据报文,如果接收端节点接收到的数据报文序号为1、2、3和5,那么由于数据报文3和5不连续,则接收端节点直接丢弃数据报文5,不会进行后续的确认处理。
亦即,在本发明中如果存在着不连续接收的数据报文,那么根本就不会对其进行确认信息的生成;这也就意味着,在进行确认报文封装之前,对同一个会话的不同数据报文所生成的ACK确认信息可能对某一个数据报文进行了反复确认。仍以发送端节点通过一个会话发送序号分别为1、2、3、4和5的数据报文为例,如果在进行确认报文封装之前接收端节点全部进行了接收和ACK确认信息的生成,那么数据报文5的ACK确认信息事实上同时确认了前四个数据报文的正确接收。
此外,如果存在NACK确认信息,由于其是针对独立帧的指示信息,因此无需考虑重复问题,全部加以保存和封装即可。
基于上述情况,本发明的较佳实施例为:
图3所示实施例步骤S1中接收端节点保存确认信息的步骤包括接收端节点基于会话更新保存ACK确认信息,具体包括:
接收端节点识别所生成确认信息对应的会话,针对每一会话,仅保存对应其最后一数据报文的ACK确认信息,丢弃对应其之前数据报文的ACK确认信息;
当然,如果数据报文的控制标识包括NACK标识,则接收端节点保存确认信息的步骤还包括:保存所生成的全部NACK确认信息。
以发送端节点通过一个会话发送序号分别为1、2、3、4和5的数据报文为例,如果接收端节点生成了对数据报文1、2、3、5的ACK确认信息,而对数据报文4生成了NACK确认信息,那么通过不断的确认信息生成和更新,最后保存的是数据报文5的ACK确认信息和数据报文4的NACK确认信息,能够有效减小最终封装的确认报文的规模,有助于降低节点间通信的带宽占用。
进一步的,对于发送端节点来说,需要对接收到的确认报文进行解析和处理,以保证通信确认基础上的后续处理,如图5所示实施例。
在本实施例中,步骤S1之前还包括步骤S0:发送端节点将发送的各个会话的数据报文送入发送缓存中,这是为了保证没有接收到确认报文时能够重新进行数据报文的发送,避免丢包现象的发生;同时,可以不必等待收到确认信息之后再继续发送后续数据报文,而是发送端节点按序发送,接收端节点按序接收,如果发生中间丢包现象,那么接收端节点直接抛弃后续数据报文,等待发送端节点重新发送即可。
此外,还包括步骤S3:发送端节点通过解析确认报文获得确认信息,将相应的数据报文从发送缓存中清除;以及,对于发送缓存中超时未被清除的数据报文,重新向接收端节点发送。
显然,如果确认报文中保存了对每个数据报文的确认信息,那么针对每个确认信息进行发送缓存中数据报文的删除即可;或者,如果确认报文中保存的是最后一数据报文的ACK确认信息,那么删除该ACK确认信息所标识序号之前的全部数据报文即可,对于NACK确认信息,则仍是将相应的数据报文从发送缓存中清除。具体情况可以根据确认报文的封装情况确定,在此不再赘述。
较佳的,由于发送端节点所解析的应该是来自不同接收端节点的确认报文,而且每一确认报文中又包括针对不同会话的确认信息,因此对于发送端节点来说,可以通过批量解析和批量处理收到的确认报文的方式,进一步提高处理效率,如图6所示,步骤S3中发送端节点通过解析接收到的确认报文获得确认信息,将相应的数据报文从发送缓存中清除的步骤包括:
步骤S31、当满足预设的解析条件时,发送端节点解析接收到的确认报文,获得确认信息并保存;
本步骤S31是批量解析确认报文的方案,即满足预设的解析条件时,将批量确认报文解析为本地的确认信息。其中,预设的解析条件包括前一次解析后到达预设的时间间隔、前一次解析后接收到预设数目的确认报文或收到需要即时处理的数据报文。
本步骤S31批量解析确认报文之后,并不一定要立即处理解析出来的确认信息,即发送端节点可以在适当的时候对解析出的确认信息进行批量处理,如步骤S32所示。
步骤S32、当满足预设的处理条件时,发送端节点根据所保存的确认信息,将相应的数据报文从发送缓存中清除;
其中,预设的处理条件包括前一次处理后到达预设的时间间隔、前一次处理后解析出预设数目的确认信息或解析出需要即时处理的数据报文。
必须加以指出的是,对于硬件组播会话,发送端节点需要获得所有目的节点的确认报文后,才能将相应的数据报文从发送缓存中清除。
可以看出,通过上述步骤S31~S32,可以实现发送端节点对于接收到确认报文的批量解析和批量处理。作为补充实施例,也可以单独执行步骤S31或者单独执行步骤S32,即批量解析即时处理,或者即时解析批量处理,可以根据实际节点的处理能力和节点间通信的数据量加以调整;相对的,批量解析和批量处理是较佳的实施方式,其实现过程请结合图7所示。
再进一步的,对于上述批量解析确认报文的技术方案,由于解析出来的ACK确认信息同样可能存在重复确认的问题,比如先后收到的N个确认报文被同一批解析,而这些确认报文中存在针对同一个会话的ACK确认信息,举例来说,分别有对某一个会话前10个和前20个数据报文的ACK确认信息。
为了克服这种情况所可能导致的后续重复处理,步骤S31中发送端节点保存本地确认信息的步骤可以包括:发送端节点基于会话更新所保存的ACK确认信息的步骤,具体包括:针对与接收端节点间的每一会话,仅保存对应其最后一数据报文的ACK确认信息,丢弃对应其之前数据报文的ACK确认信息;
对于NACK确认信息,由于不会存在重复确认的问题,因此对所生成的全部NACK确认信息直接保存即可,无需进一步优化处理;
相应的,步骤S32中发送端节点将相应的数据报文从发送缓存中清除的步骤可以简化为:对于每一会话,删除发送缓存中与所保存的ACK确认信息对应的数据报文及之前的数据报文;当然,对应NACK确认信息的数据报文也需要加以删除。
下面以一个具体实施例为例,示例性说明本发明提供的节点间通信确认机制的实现方法技术方案。在该具体实施例中,节点2(接收端节点)回复确认报文(以ACK报文为例),节点1(发送端节点)处理确认报文,其节点间通信确认机制的实现方法如图8所示:
节点1与节点2之间存在三个会话,分别是组播1会话、组播2会话和单播会话;
在节点2回应ACK 1时,已经接收到组播1会话的1-9数据报文和组播2会话的1-20数据报文;因此,ACK 1中封装了两个确认信息,分别是对组播1会话的数据报文9的确认信息,以及对组播2会话的数据报文20的确认信息;
在节点2回应ACK 2时,已经接收到组播1会话的10-90数据报文和单播会话的1-100数据报文;因此,ACK 2中也封装了两个确认信息,分别是对组播1会话的数据报文90的确认信息,以及对单播会话的数据报文100的确认信息;
在节点1上,有可能对两个ACK一一进行处理,即:收到ACK 1时,删除发送缓存中组播1会话的1-9数据报文,以及组播2会话的1-20数据报文;收到ACK 2时,删除发送缓存中组播1会话的10-90数据报文,以及单播会话的1-100数据报文;
或者,节点1对两个ACK都解析完成再进行处理,这时是直接删除组播1会话的1-90数据报文。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括如下步骤:
步骤S1、对于接收到的各个会话的数据报文,接收端节点为其生成相应的确认信息并保存,所述相应的确认信息包括所述数据报文所属的会话ID、所述数据报文的控制标识以及所述数据报文的序号;
步骤S2、当满足预设的确认条件时,所述接收端节点将所保存的确认信息封装到一个确认报文中,并发送给所述发送端节点;
所述的存储介质包括:ROM/RAM(Read Only Memory/Random-Access Memory,只读存储器/随机访问内存)、磁碟或者光盘等。
为了实现本发明的技术构思,本发明的实施例还提供了一种节点间通信确认机制的实现***100,如图9所示,包括:
发送端节点110和接收端节点120,其中,该发送端节点110和接收端节点120分别包括发送接收单元111和121;
确认信息生成单元130,与接收端节点120的发送接收单元121连接,用于为接收到的各个会话的数据报文生成相应的确认信息;该确认信息可以包括数据报文所属的会话ID,数据报文的控制标识以及数据报文的序号;
其中,数据报文的控制标识可以包括ACK标识,其相应的确认信息可称为ACK确认信息;
数据报文的控制标识还可以进一步包括NACK标识,其相应的确认信息可称为NACK确认信息;NACK确认信息的优先级可以高于ACK确认信息;
确认信息保存单元140,与确认信息生成单元130连接,用于保存所生成的确认信息;
确认信息组装单元150,与确认信息保存单元140和接收端节点120的发送接收单元121连接,用于在满足预设的确认条件时,将所保存的确认信息封装到一个确认报文中,并通过该发送接收单元121发送给发送端节点110;其中,预设的确认条件可以包括:前一次确认报文发送后到达预设的时间间隔、前一次确认报文发送后接收到预设数目的数据报文或收到需要即时确认的数据报文,等。
通过上述提供的节点间通信确认机制的实现***100,通过将不同会话的确认信息封装在一个确认报文中,相对于为每一个会话在一定时机回复确认报文而言,可以有效减少确认报文的数量,进而减少IPC带宽占用,提高发送端节点的处理效率,有效节省节点间通信的开销。
较佳的,为了避免ACK确认信息可能存在的重复确认问题,该确认信息保存单元140可以包括:
接收端会话识别模块141,用于识别所生成确认信息对应的会话;
接收端确认信息保存模块142,与接收端会话识别模块141连接,用于针对每一会话,仅保存对应其最后一数据报文的ACK确认信息,丢弃对应其之前数据报文的ACK确认信息;
在数据报文的控制标识还包括NACK标识的情况下,接收端确认信息保存模块142还用于保存所生成的全部NACK确认信息。
进一步的,本发明还提供了一种节点间通信确认机制的实现***100的较佳实施例,为发送端节点110提供确认报文的解析和处理功能,以保证通信确认基础上的后续处理。
如图10所示,该实施例在图9所示实施例基础上,还包括:
发送缓存单元160,与发送端节点110的发送接收单元111连接,用于缓存发送后的各个会话的数据报文;
确认信息解析单元170,与发送端节点110的发送接收单元111连接,用于通过解析接收到的确认报文获得确认信息并保存;
确认信息处理单元180,与确认信息解析单元170和发送缓存单元160连接,用于将确认信息相应的数据报文从发送缓存单元中清除;
发送缓存监控单元190,与发送缓存单元160连接,用于监控发送缓存单元160中超时未被清除的数据报文,使其重新向接收端节点120发送。
较佳的,为了避免解析后的确认信息可能存在的重复确认问题,确认信息解析单元170中可以包括:
发送端会话识别模块171,用于针对与接收端节点间的每一会话,仅保存对应其最后一数据报文的ACK确认信息,丢弃对应其之前数据报文的ACK确认信息;
以及,如果解析出NACK确认信息,由于无需优化处理,因此全部加以保存即可;
则确认信息处理单元180对于每一会话,删除发送缓存单元160中与所保存的ACK确认信息对应的数据报文及之前的数据报文,对于NACK确认信息所对应的数据报文直接删除即可。
但是对于硬件组播会话,发送端节点需要获得所有目的节点的确认报文后,才能将相应的数据报文从发送缓存单元160中清除。
更佳的,为了进一步提高发送端节点110的处理效率,其可以对确认报文进行批量解析和/或批量处理,具体的,节点间通信确认机制的实现***100还可以包括:
解析监控单元1a0,与确认信息解析单元170连接,用于在满足预设的解析条件时,触发确认信息解析单元170;其中,预设的解析条件包括前一次解析后到达预设的时间间隔、前一次解析后接收到预设数目的确认报文或收到需要即时处理的数据报文;
和/或
处理监控单元1b0,与确认信息处理单元180连接,用于在满足预设的处理条件时,触发确认信息处理单元180;其中,预设的处理条件包括前一次处理后到达预设的时间间隔、前一次处理后解析出预设数目的确认信息或解析出需要即时处理的数据报文。
虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。