一种异步通讯的实现方法

文档序号:7992119阅读:255来源:国知局
专利名称:一种异步通讯的实现方法
技术领域
本发明涉及一种通信技术,尤其涉及一种使用异步通讯组件实现数据通讯的方法。
背景技术
在分布式通讯领域,软件开发过程中会遇到各种各样的应用协议。很多应用协议都提供了同步模式的代码原型,如SNMP (Simple Network Management Protocol,简单网络管理协议)、SOAP (Simple Object Access Protocol,简单对象访问协议)等等。在同步模式下,同时接收多个请求,并且依次同步的处理这些事件。然而,一旦有需要处理较长时间 的请求出现,则会降低处理效率。如何使用这些协议原型,实现在多种应用协议之上开发异步通讯的协议API(Application Programming Interface,应用程序编程接口)是需要解决的问题。在现有技术中由于不是在多种应用协议之开发异步通讯的协议API,因此,适用协议单一,通讯软件的开发和维护成本增大,实现的异步通讯功能相对简单。比如公开号为CN 1195242A、名称为一种计算机网络异步通讯的方法的技术方案,采用在一个网络终端中包括用于与其它网络终端进行通讯的通讯模块,在该通讯模块中设置至少一个通讯管理模块和至少一个通讯链路控制模块;通讯管理模块用于设置连接参数,编写通讯应用程序等;通讯链路程序模块用于处理网络连接中发生的各种事件,并在发生网络故障时进行自动恢复,同一个通讯模块可以分别作为客户端模块或服务器模块。减少了编程工作量,使用相同的程序来实现客户机和服务器的功能。其不足之处在于适用协议单一,实现的异步通讯功能相对简单。

发明内容
本发明主要目的在于提供一种异步通讯的实现方法,它使用一种异步通讯组件,运用各种协议进行数据通讯。本发明针对现有技术问题主要是通过下述技术方案得以解决的,一种异步通讯的实现方法,包括
(A)在应用A与应用B之间设置异步通讯组件,异步通讯组件分为管理端和代理端两个部分,管理端放置在主动发送的应用A上,代理端放置在被动接收的应用B上;
(B)管理端和代理端之间通过协议栈进行异步通讯。大多数通讯协议是基于请求、应答的模型工作的,本方法设计的异步通讯组件中也存在着请求、应答的两种角色,由管理端和代理端两个部分实现,管理端和代理端分别放置在主动发送的应用A上和被动接收的应用B上。在并发设计中,事件多路分解和连接管理可以与它的协议处理代码分离,运用协议的代码原型采用同步模式实现事件多路分解和连接管理。本方法采用一种异步模式实现了事件多路分解和连接管理,并将这部分代码作为组件复用,使用多种应用协议,可以快速开发出满足要求的协议API,从而实现在管理端和代理端之间通过协议栈运用各种协议进行数据通讯。作为优选,管理端包括一个异步发送接口、一个发送队列、一个接收队列、一组发送和接收线程、一个管理端缓存区、一组工作线程及一个监视线程;代理端包括一个接收队列、一个发送队列、一组接收和发送线程、一组工作线程、一个代理端缓存区、一个重包检测区和一个异步返回接口。作为优选,应用A不断调用异步发送接口将各种请求消息发送给代理端,其中一种类型的请求消息关联一个管理端回调函数,从代理端收到返回消息后,工作线程对各种返回消息进行多路分解,调用不同的管理端回调函数,完成消息的返回处理,监视线程负责监测各种异常情况导致的消息超时,并进行消息重发。作为优选,代理端收到各种请求消息后,其中一种类型的请求消息关联了一个代理端回调函数,代理端调用不同的代理端回调函数,同步模式下,代理端回调函数直接完成 消息的处理并返回,异步模式下,代理端回调函数将消息放入应用B的消息处理队列。作为优选,管理端的发送流程包括
O应用A以非阻塞方式调用异步发送接口发送请求消息,并将请求消息放入管理端发送队列;
2)管理端发送线程从发送队列中取出请求消息,将请求消息和关联的管理端回调函数放入管理端缓存区,并将请求消息发送出去;
所述代理端的接收流程包括
3)代理端接收线程收到请求消息,并放入代理端接收队列;
4)代理端工作线程从接收队列中取出消息,根据消息类型调用它们的代理端回调函数,如果是同步操作,回调函数中完成消息处理,立即返回给管理端,如果是异步操作,回调函数并不完成消息处理,也不立即返回管理端,而是将请求消息、发送端地址等信息存入代理端缓存区,并获得一个代理端缓存区唯一标识,然后将消息和代理端缓存区唯一标识一起放入应用B的消息处理队列;
所述代理端的返回流程包括
5)应用B从消息处理队列中获得消息,进行处理,处理完毕后,调用代理端异步返回接
Π ;
6)代理端异步返回接口根据代理端缓存区唯一标识获得请求消息及上下文,构造返回消息,然后将返回消息放入代理端发送队列;
7)代理端发送线程从发送队列中取出返回消息,并返回给管理端;
所述管理端的接收流程包括
8)管理端接收线程收到返回消息,放入管理端接收队列;
9)管理端工作线程从接收队列中取出返回消息,管理端工作线程根据返回消息的唯一标识,在管理端缓冲区中找到之前的请求消息和回调函数,然后将返回消息、请求消息通知给相应的管理端回调函数;
10)管理端回调函数完成返回消息的处理。作为优选,监视线程对整个缓存区进行周期扫描,监测管理端缓存区中消息超时的情况,每个请求消息都有一个超时时间和最大重发次数,如果发现超时包,将进行重发;重发超过最大次数时,将激活管理端回调函数,通知应用A请求消息超时。在管理端有一个监视线程,对整个缓存区进行周期扫描,监测管理端缓存区中消息超时的情况,如果发现超时包,将进行重发,重发超过最大次数时,将激活回调函数,通知应用A请求消息超时。作为优选,在代理端设置有重包检测功能,将请求消息唯一标识和回应包关联起来,在发送线程构造回应包后将回应包存储在重包检测区,如果有同样唯一标识的请求包来到,将不通知应用B,直接返回回应包。代理端将请求消息唯一标识和回应包关联起来,在发送线程构造回应包后将回应包存储起来,如果有同样唯一标识的请求包来到,将不通知应用B,直接返回回应包,这样就避免了同一个消息的重复处理。本发明带来的有益效果是,使用异步通讯组件方便快捷的开发异步通讯的协议API,实现运用多种协议进行数据通讯。


·
图I是本发明的一种异步通讯组件结构示意 图2是本发明的一种数据流处理程图。图中,101是应用A,102是管理端,103是协议栈,104是代理端,105是应用B。
具体实施例方式下面通过实施例,并结合附图,对本发明的技术方案作进一步具体说明。实施例I :如图I所示,本发明是一种异步通讯的实现方法,
在应用A 101与应用B105之间设置异步通讯组件,异步通讯组件分为管理端102和代理端104两个部分,管理端102放置在主动发送的应用A 101上,代理端104放置在被动接收的应用B105上;管理端102和代理端104通过协议栈103进行异步通讯。图2所示为异步通讯组件的数据处理流程图,如图所示
管理端102的发送流程
1)应用AlOl以非阻塞方式调用异步发送接口发送请求消息;
2)异步发送函数将请求消息放入管理端102发送队列;
3)管理端102发送线程从发送队列中取出请求消息,将请求消息和关联的管理端回调函数放入管理端缓存区,然后调用协议栈103处理程序将请求消息发送出去;
代理端104的接收流程
4)代理端104接收线程调用协议栈103处理程序收到请求消息,在代理端104重包检测区中检测是否为重发包,是则使用协议栈103处理程序将检测到的回应包发送给管理端102 ;否则将请求包放入代理端104接收队列;
5)代理端104工作线程从接收队列中取出消息,根据消息类型调用它们的代理端回调函数;如果是同步操作,回调函数中完成消息处理,在构造回应包后将回应包存储在重包检测区,立即返回给管理端102 ;如果是异步操作,回调函数并不完成消息处理,也不立即返回管理端,而是将请求消息、发送端地址等信息存入代理端104缓存区,并获得一个代理端缓存区唯一标识,然后将消息和代理端缓存区唯一标识一起放入应用B105的消息处理队列;代理端104的返回流程
6)应用B105从消息处理队列中获得消息,进行处理。处理完毕后(可能经过多个线程才处理完毕),调用代理端104异步返回接口 ;
7)代理端104异步返回接口根据代理端缓存区唯一标识获得请求消息及上下文,构造返回消息,然后将返回消息放入代理端发送队列;
8)代理端104发送线程从发送队列中取出返回消息,在构造回应包后将回应包存储在重包检测区,然后调用协议栈103处理程序返回给管理端102 ;
管理端102的接收流程
9)管理端102接收线程调用协议栈103处理程序收到返回消息,放入管理端102接收队列;
10)管理端102工作线程从接收队列中取出返回消息;由于返回消息和请求消息的消息唯一标识相同,所以管理端102工作线程根据返回消息的唯一标识,在管理端102缓冲区中找到之前的请求消息和回调函数,然后将返回消息、请求消息通知给相应的管理端102回调函数;
11)管理端102回调函数完成返回消息的处理。通讯组件对异常情况的处理 每个请求消息都有一个超时时间和最大重发次数。在管理端102有一个监视线程,对整个缓存区进行周期扫描,监测管理端102缓存区中消息超时的情况,如果发现超时包,将进行重发,重发超过最大次数时,将激活回调函数,通知应用A请求消息超时;
代理端104具有重包检测功能,代理端104将请求消息唯一标识和回应包关联起来,在发送线程构造回应包后将回应包存储起来。如果有同样唯一标识的请求包来到,将不通知应用B105,直接返回回应包。实施例2 :下面是结合编译工具gSOAP和本方法开发异步通讯SOAP API的实施例。gSOAP编译工具可以自动生成开发Soap协议所需要的桩和框架程序。桩是放在客户端的一个“代理”,框架是放在服务器端的一个“代理”。桩中声明了一个函数,但其中的内容并不是具体的算法,而是一系列网络连接的协议,自动地去查找框架所在的主机,而后与其交换数据,并得到返回值的一系列代码。此时客户端的进程只需要去调桩中的函数,即可实现与远端服务器的数据交换,这样便保证了数据传输对于应用进程的透明性。gSOAP生成的桩代码的处理流程为
1.初始化运行环境实例;
2.构造请求消息头和实体;
3.连接并完成消息发送;
4.等待接收回应消息;
5.解析回应消息头和实体,获得返回结果;
6.关闭连接。使用gSOAP产生的框架需要先在应用程序上启动监听端口,初始化运行环境实例,并等待连接。当一个连接来到以后,调用框架提供的方法来进行处理。gSOAP生成的框架代码的处理流程为
I.接收请求包;2.解析请求包,获得请求信息,激活回调函数;
3.回调函数返回,获得返回消息,构造返回包;
4.发送返回包。使用本发明的异步通讯组件,结合桩和框架的代码,开发异步通讯SOAP API。这个API包括管理端和代理端两个不同的部分。应用A调用管理端异步发送接口发送Soap消息给对端,通过管理端回调函数接收返回的Soap消息。管理端的处理流程为
1.异步发送接口使用桩代码的处理流程I初始化运行环境实例,将需要发送的信息放入发送队列;
2.发送线程使用桩代码的处理流程2构造发送包,并将发送包和回调函数放入管理端缓存区,使用桩代码的处理流程3将消息发送出去;
3.接收线程使用桩代码的处理流程4收到一个回应包,使用桩代码的处理流程5解析这个回应包,将解析后的消息放入接收队列;
4.工作线程从接收队列中取出消息,到管理端缓存区中寻找发送信息上下文,并激活回调函数,在回调函数中API将提供发送的全部信息和收到的全部信息;
5.监视线程监视管理端缓存区中已发送的消息,如果返回超时,将重发。多次重复仍然无返回,则激活回调函数。在回调函数中API将提供发送的全部信息和超时标志。代理端的接收线程启动监听端口,初始化运行环境实例,并等待连接。当一个连接来到时,代理端的处理流程为
1.接收线程使用框架代码的处理流程I接收请求包,在重包检测区中检测是否为重发包,是则使用框架代码的处理流程4发送回应包,否则请求包放入接收队列;
2.工作线程使用框架代码的处理流程2处理请求包,并激活回调函数;
3.回调函数将请求包放入代理端缓存区中,代理缓存区会返回一个唯一标识,回调函数将请求消息和代理缓存区唯一标识通知给应用B ;
4.应用B在处理完请求消息后,调用异步返回接口,使用代理端缓存区唯一标识从缓存区中找到这个请求包的信息,使用框架代码的处理流程3构造回应包,并将放入重包检测区和发送队列;
5.发送线程使用框架代码的处理流程4将回应包返回。经过上述转化处理,异步通讯组件可以将一个同步通讯的SOAP协议API,变为一个可靠、高效的异步通讯的SOAP协议API。还可以应用到其它的协议中,方便实现更多高效、可靠的异步通讯协议API。所以本发明具有使用异步通讯组件开发异步通讯的协议API,实现运用多种协议进行数据通讯,编程方便快捷,适应性强等特征。
权利要求
1.一种异步通讯的实现方法,其特征包括 (A)在应用A与应用B之间设置异步通讯组件,所述异步通讯组件分为管理端和代理端两个部分,所述管理端放置在主动发送的应用A上,所述代理端放置在被动接收的应用B上; (B)所述管理端和代理端之间通过协议栈进行异步通讯。
2.根据权利要求I所述一种异步通讯的实现方法,其特征在于所述管理端包括一个异步发送接口、一个发送队列、一个接收队列、一组发送和接收线程、一个管理端缓存区、一组工作线程及一个监视线程;所述代理端包括一个接收队列、一个发送队列、一组接收和发送线程、一组工作线程、一个代理端缓存区、一个重包检测区和一个异步返回接口。
3.根据权利要求2所述一种异步通讯的实现方法,其特征在于应用A不断调用异步发送接口将各种请求消息发送给代理端,其中一种类型的请求消息关联一个管理端回调函数,从代理端收到返回消息后,工作线程对各种返回消息进行多路分解,调用不同的管理端回调函数,完成消息的返回处理,监视线程负责监测各种异常情况导致的消息超时,并进行消息重发。
4.根据权利要求2所述一种异步通讯的实现方法,其特征在于所述代理端收到各种请求消息后,其中一种类型的请求消息关联了一个代理端回调函数,代理端调用不同的代理端回调函数,同步模式下,代理端回调函数直接完成消息的处理并返回,异步模式下,代理端回调函数将消息放入应用B的消息处理队列。
5.根据权利要求1,2,3或4所述一种异步通讯的实现方法,其特征在于,所述管理端的发送流程包括 (1)应用A以非阻塞方式调用异步发送接口发送请求消息,并将请求消息放入管理端发送队列; (2)管理端发送线程从发送队列中取出请求消息,将请求消息和关联的管理端回调函数放入管理端缓存区,并将请求消息发送出去; 所述代理端的接收流程包括 (3)代理端接收线程收到请求消息,并放入代理端接收队列; (4)代理端工作线程从接收队列中取出消息,根据消息类型调用它们的代理端回调函数,如果是同步操作,回调函数中完成消息处理,立即返回给管理端,如果是异步操作,回调函数并不完成消息处理,也不立即返回管理端,而是将请求消息、发送端地址等信息存入代理端缓存区,并获得一个代理端缓存区唯一标识,然后将消息和代理端缓存区唯一标识一起放入应用B的消息处理队列; 所述代理端的返回流程包括 (5)应用B从消息处理队列中获得消息,进行处理,处理完毕后,调用代理端异步返回接口 ; (6)代理端异步返回接口根据代理端缓存区唯一标识获得请求消息及上下文,构造返回消息,然后将返回消息放入代理端发送队列; (7)代理端发送线程从发送队列中取出返回消息,并返回给管理端; 所述管理端的接收流程包括 (8)管理端接收线程收到返回消息,放入管理端接收队列;(9)管理端工作线程从接收队列中取出返回消息,管理端工作线程根据返回消息的唯一标识,在管理端缓冲区中找到之前的请求消息和回调函数,然后将返回消息、请求消息通知给相应的管理端回调函数; (10)管理端回调函数完成返回消息的处理。
6.根据权利要求2所述一种异步通讯的实现方法,其特征在于所述监视线程,对整个缓存区进行周期扫描,监测管理端缓存区中消息超时的情况,每个请求消息都有一个超时时间和最大重发次数,如果发现超时包,将进行重发;重发超过最大次数时,将激活管理端回调函数,通知应用A请求消息超时。
7.根据权利要求5所述一种异步通讯的实现方法,其特征在于在所述代理端设置有重包检测功能,将请求消息唯一标识和回应包关联起来,在发送线程构造回应包后将回应包存储在重包检测区,如果有同样唯一标识的请求包来到,将不通知应用B,直接返回回应包。
全文摘要
本发明公开了一种异步通讯的实现方法,它使用异步通讯组件,使用多种应用协议进行数据通讯,包括在应用A与应用B之间设置异步通讯组件,异步通讯组件分为管理端和代理端两个部分,管理端放置在主动发送的应用A上,代理端放置在被动接收的应用B上;管理端和代理端之间通过协议栈进行异步通讯。
文档编号H04L29/06GK102946376SQ20111038702
公开日2013年2月27日 申请日期2011年11月29日 优先权日2011年11月29日
发明者黄宇殊, 杨亚鹏 申请人:Ut斯达康通讯有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1