專利名稱:一種異步通訊的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種通信技術(shù),尤其涉及一種使用異步通訊組件實(shí)現(xiàn)數(shù)據(jù)通訊的方法。
背景技術(shù):
在分布式通訊領(lǐng)域,軟件開發(fā)過程中會(huì)遇到各種各樣的應(yīng)用協(xié)議。很多應(yīng)用協(xié)議都提供了同步模式的代碼原型,如SNMP (Simple Network Management Protocol,簡單網(wǎng)絡(luò)管理協(xié)議)、SOAP (Simple Object Access Protocol,簡單對(duì)象訪問協(xié)議)等等。在同步模式下,同時(shí)接收多個(gè)請(qǐng)求,并且依次同步的處理這些事件。然而,一旦有需要處理較長時(shí)間 的請(qǐng)求出現(xiàn),則會(huì)降低處理效率。如何使用這些協(xié)議原型,實(shí)現(xiàn)在多種應(yīng)用協(xié)議之上開發(fā)異步通訊的協(xié)議API(Application Programming Interface,應(yīng)用程序編程接口)是需要解決的問題。在現(xiàn)有技術(shù)中由于不是在多種應(yīng)用協(xié)議之開發(fā)異步通訊的協(xié)議API,因此,適用協(xié)議單一,通訊軟件的開發(fā)和維護(hù)成本增大,實(shí)現(xiàn)的異步通訊功能相對(duì)簡單。比如公開號(hào)為CN 1195242A、名稱為一種計(jì)算機(jī)網(wǎng)絡(luò)異步通訊的方法的技術(shù)方案,采用在一個(gè)網(wǎng)絡(luò)終端中包括用于與其它網(wǎng)絡(luò)終端進(jìn)行通訊的通訊模塊,在該通訊模塊中設(shè)置至少一個(gè)通訊管理模塊和至少一個(gè)通訊鏈路控制模塊;通訊管理模塊用于設(shè)置連接參數(shù),編寫通訊應(yīng)用程序等;通訊鏈路程序模塊用于處理網(wǎng)絡(luò)連接中發(fā)生的各種事件,并在發(fā)生網(wǎng)絡(luò)故障時(shí)進(jìn)行自動(dòng)恢復(fù),同一個(gè)通訊模塊可以分別作為客戶端模塊或服務(wù)器模塊。減少了編程工作量,使用相同的程序來實(shí)現(xiàn)客戶機(jī)和服務(wù)器的功能。其不足之處在于適用協(xié)議單一,實(shí)現(xiàn)的異步通訊功能相對(duì)簡單。
發(fā)明內(nèi)容
本發(fā)明主要目的在于提供一種異步通訊的實(shí)現(xiàn)方法,它使用一種異步通訊組件,運(yùn)用各種協(xié)議進(jìn)行數(shù)據(jù)通訊。本發(fā)明針對(duì)現(xiàn)有技術(shù)問題主要是通過下述技術(shù)方案得以解決的,一種異步通訊的實(shí)現(xiàn)方法,包括
(A)在應(yīng)用A與應(yīng)用B之間設(shè)置異步通訊組件,異步通訊組件分為管理端和代理端兩個(gè)部分,管理端放置在主動(dòng)發(fā)送的應(yīng)用A上,代理端放置在被動(dòng)接收的應(yīng)用B上;
(B)管理端和代理端之間通過協(xié)議棧進(jìn)行異步通訊。大多數(shù)通訊協(xié)議是基于請(qǐng)求、應(yīng)答的模型工作的,本方法設(shè)計(jì)的異步通訊組件中也存在著請(qǐng)求、應(yīng)答的兩種角色,由管理端和代理端兩個(gè)部分實(shí)現(xiàn),管理端和代理端分別放置在主動(dòng)發(fā)送的應(yīng)用A上和被動(dòng)接收的應(yīng)用B上。在并發(fā)設(shè)計(jì)中,事件多路分解和連接管理可以與它的協(xié)議處理代碼分離,運(yùn)用協(xié)議的代碼原型采用同步模式實(shí)現(xiàn)事件多路分解和連接管理。本方法采用一種異步模式實(shí)現(xiàn)了事件多路分解和連接管理,并將這部分代碼作為組件復(fù)用,使用多種應(yīng)用協(xié)議,可以快速開發(fā)出滿足要求的協(xié)議API,從而實(shí)現(xiàn)在管理端和代理端之間通過協(xié)議棧運(yùn)用各種協(xié)議進(jìn)行數(shù)據(jù)通訊。作為優(yōu)選,管理端包括一個(gè)異步發(fā)送接口、一個(gè)發(fā)送隊(duì)列、一個(gè)接收隊(duì)列、一組發(fā)送和接收線程、一個(gè)管理端緩存區(qū)、一組工作線程及一個(gè)監(jiān)視線程;代理端包括一個(gè)接收隊(duì)列、一個(gè)發(fā)送隊(duì)列、一組接收和發(fā)送線程、一組工作線程、一個(gè)代理端緩存區(qū)、一個(gè)重包檢測區(qū)和一個(gè)異步返回接口。作為優(yōu)選,應(yīng)用A不斷調(diào)用異步發(fā)送接口將各種請(qǐng)求消息發(fā)送給代理端,其中一種類型的請(qǐng)求消息關(guān)聯(lián)一個(gè)管理端回調(diào)函數(shù),從代理端收到返回消息后,工作線程對(duì)各種返回消息進(jìn)行多路分解,調(diào)用不同的管理端回調(diào)函數(shù),完成消息的返回處理,監(jiān)視線程負(fù)責(zé)監(jiān)測各種異常情況導(dǎo)致的消息超時(shí),并進(jìn)行消息重發(fā)。作為優(yōu)選,代理端收到各種請(qǐng)求消息后,其中一種類型的請(qǐng)求消息關(guān)聯(lián)了一個(gè)代理端回調(diào)函數(shù),代理端調(diào)用不同的代理端回調(diào)函數(shù),同步模式下,代理端回調(diào)函數(shù)直接完成 消息的處理并返回,異步模式下,代理端回調(diào)函數(shù)將消息放入應(yīng)用B的消息處理隊(duì)列。作為優(yōu)選,管理端的發(fā)送流程包括
O應(yīng)用A以非阻塞方式調(diào)用異步發(fā)送接口發(fā)送請(qǐng)求消息,并將請(qǐng)求消息放入管理端發(fā)送隊(duì)列;
2)管理端發(fā)送線程從發(fā)送隊(duì)列中取出請(qǐng)求消息,將請(qǐng)求消息和關(guān)聯(lián)的管理端回調(diào)函數(shù)放入管理端緩存區(qū),并將請(qǐng)求消息發(fā)送出去;
所述代理端的接收流程包括
3)代理端接收線程收到請(qǐng)求消息,并放入代理端接收隊(duì)列;
4)代理端工作線程從接收隊(duì)列中取出消息,根據(jù)消息類型調(diào)用它們的代理端回調(diào)函數(shù),如果是同步操作,回調(diào)函數(shù)中完成消息處理,立即返回給管理端,如果是異步操作,回調(diào)函數(shù)并不完成消息處理,也不立即返回管理端,而是將請(qǐng)求消息、發(fā)送端地址等信息存入代理端緩存區(qū),并獲得一個(gè)代理端緩存區(qū)唯一標(biāo)識(shí),然后將消息和代理端緩存區(qū)唯一標(biāo)識(shí)一起放入應(yīng)用B的消息處理隊(duì)列;
所述代理端的返回流程包括
5)應(yīng)用B從消息處理隊(duì)列中獲得消息,進(jìn)行處理,處理完畢后,調(diào)用代理端異步返回接
Π ;
6)代理端異步返回接口根據(jù)代理端緩存區(qū)唯一標(biāo)識(shí)獲得請(qǐng)求消息及上下文,構(gòu)造返回消息,然后將返回消息放入代理端發(fā)送隊(duì)列;
7)代理端發(fā)送線程從發(fā)送隊(duì)列中取出返回消息,并返回給管理端;
所述管理端的接收流程包括
8)管理端接收線程收到返回消息,放入管理端接收隊(duì)列;
9)管理端工作線程從接收隊(duì)列中取出返回消息,管理端工作線程根據(jù)返回消息的唯一標(biāo)識(shí),在管理端緩沖區(qū)中找到之前的請(qǐng)求消息和回調(diào)函數(shù),然后將返回消息、請(qǐng)求消息通知給相應(yīng)的管理端回調(diào)函數(shù);
10)管理端回調(diào)函數(shù)完成返回消息的處理。作為優(yōu)選,監(jiān)視線程對(duì)整個(gè)緩存區(qū)進(jìn)行周期掃描,監(jiān)測管理端緩存區(qū)中消息超時(shí)的情況,每個(gè)請(qǐng)求消息都有一個(gè)超時(shí)時(shí)間和最大重發(fā)次數(shù),如果發(fā)現(xiàn)超時(shí)包,將進(jìn)行重發(fā);重發(fā)超過最大次數(shù)時(shí),將激活管理端回調(diào)函數(shù),通知應(yīng)用A請(qǐng)求消息超時(shí)。在管理端有一個(gè)監(jiān)視線程,對(duì)整個(gè)緩存區(qū)進(jìn)行周期掃描,監(jiān)測管理端緩存區(qū)中消息超時(shí)的情況,如果發(fā)現(xiàn)超時(shí)包,將進(jìn)行重發(fā),重發(fā)超過最大次數(shù)時(shí),將激活回調(diào)函數(shù),通知應(yīng)用A請(qǐng)求消息超時(shí)。作為優(yōu)選,在代理端設(shè)置有重包檢測功能,將請(qǐng)求消息唯一標(biāo)識(shí)和回應(yīng)包關(guān)聯(lián)起來,在發(fā)送線程構(gòu)造回應(yīng)包后將回應(yīng)包存儲(chǔ)在重包檢測區(qū),如果有同樣唯一標(biāo)識(shí)的請(qǐng)求包來到,將不通知應(yīng)用B,直接返回回應(yīng)包。代理端將請(qǐng)求消息唯一標(biāo)識(shí)和回應(yīng)包關(guān)聯(lián)起來,在發(fā)送線程構(gòu)造回應(yīng)包后將回應(yīng)包存儲(chǔ)起來,如果有同樣唯一標(biāo)識(shí)的請(qǐng)求包來到,將不通知應(yīng)用B,直接返回回應(yīng)包,這樣就避免了同一個(gè)消息的重復(fù)處理。本發(fā)明帶來的有益效果是,使用異步通訊組件方便快捷的開發(fā)異步通訊的協(xié)議API,實(shí)現(xiàn)運(yùn)用多種協(xié)議進(jìn)行數(shù)據(jù)通訊。
·
圖I是本發(fā)明的一種異步通訊組件結(jié)構(gòu)示意 圖2是本發(fā)明的一種數(shù)據(jù)流處理程圖。圖中,101是應(yīng)用A,102是管理端,103是協(xié)議棧,104是代理端,105是應(yīng)用B。
具體實(shí)施例方式下面通過實(shí)施例,并結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步具體說明。實(shí)施例I :如圖I所示,本發(fā)明是一種異步通訊的實(shí)現(xiàn)方法,
在應(yīng)用A 101與應(yīng)用B105之間設(shè)置異步通訊組件,異步通訊組件分為管理端102和代理端104兩個(gè)部分,管理端102放置在主動(dòng)發(fā)送的應(yīng)用A 101上,代理端104放置在被動(dòng)接收的應(yīng)用B105上;管理端102和代理端104通過協(xié)議棧103進(jìn)行異步通訊。圖2所示為異步通訊組件的數(shù)據(jù)處理流程圖,如圖所示
管理端102的發(fā)送流程
1)應(yīng)用AlOl以非阻塞方式調(diào)用異步發(fā)送接口發(fā)送請(qǐng)求消息;
2)異步發(fā)送函數(shù)將請(qǐng)求消息放入管理端102發(fā)送隊(duì)列;
3)管理端102發(fā)送線程從發(fā)送隊(duì)列中取出請(qǐng)求消息,將請(qǐng)求消息和關(guān)聯(lián)的管理端回調(diào)函數(shù)放入管理端緩存區(qū),然后調(diào)用協(xié)議棧103處理程序?qū)⒄?qǐng)求消息發(fā)送出去;
代理端104的接收流程
4)代理端104接收線程調(diào)用協(xié)議棧103處理程序收到請(qǐng)求消息,在代理端104重包檢測區(qū)中檢測是否為重發(fā)包,是則使用協(xié)議棧103處理程序?qū)z測到的回應(yīng)包發(fā)送給管理端102 ;否則將請(qǐng)求包放入代理端104接收隊(duì)列;
5)代理端104工作線程從接收隊(duì)列中取出消息,根據(jù)消息類型調(diào)用它們的代理端回調(diào)函數(shù);如果是同步操作,回調(diào)函數(shù)中完成消息處理,在構(gòu)造回應(yīng)包后將回應(yīng)包存儲(chǔ)在重包檢測區(qū),立即返回給管理端102 ;如果是異步操作,回調(diào)函數(shù)并不完成消息處理,也不立即返回管理端,而是將請(qǐng)求消息、發(fā)送端地址等信息存入代理端104緩存區(qū),并獲得一個(gè)代理端緩存區(qū)唯一標(biāo)識(shí),然后將消息和代理端緩存區(qū)唯一標(biāo)識(shí)一起放入應(yīng)用B105的消息處理隊(duì)列;代理端104的返回流程
6)應(yīng)用B105從消息處理隊(duì)列中獲得消息,進(jìn)行處理。處理完畢后(可能經(jīng)過多個(gè)線程才處理完畢),調(diào)用代理端104異步返回接口 ;
7)代理端104異步返回接口根據(jù)代理端緩存區(qū)唯一標(biāo)識(shí)獲得請(qǐng)求消息及上下文,構(gòu)造返回消息,然后將返回消息放入代理端發(fā)送隊(duì)列;
8)代理端104發(fā)送線程從發(fā)送隊(duì)列中取出返回消息,在構(gòu)造回應(yīng)包后將回應(yīng)包存儲(chǔ)在重包檢測區(qū),然后調(diào)用協(xié)議棧103處理程序返回給管理端102 ;
管理端102的接收流程
9)管理端102接收線程調(diào)用協(xié)議棧103處理程序收到返回消息,放入管理端102接收隊(duì)列;
10)管理端102工作線程從接收隊(duì)列中取出返回消息;由于返回消息和請(qǐng)求消息的消息唯一標(biāo)識(shí)相同,所以管理端102工作線程根據(jù)返回消息的唯一標(biāo)識(shí),在管理端102緩沖區(qū)中找到之前的請(qǐng)求消息和回調(diào)函數(shù),然后將返回消息、請(qǐng)求消息通知給相應(yīng)的管理端102回調(diào)函數(shù);
11)管理端102回調(diào)函數(shù)完成返回消息的處理。通訊組件對(duì)異常情況的處理 每個(gè)請(qǐng)求消息都有一個(gè)超時(shí)時(shí)間和最大重發(fā)次數(shù)。在管理端102有一個(gè)監(jiān)視線程,對(duì)整個(gè)緩存區(qū)進(jìn)行周期掃描,監(jiān)測管理端102緩存區(qū)中消息超時(shí)的情況,如果發(fā)現(xiàn)超時(shí)包,將進(jìn)行重發(fā),重發(fā)超過最大次數(shù)時(shí),將激活回調(diào)函數(shù),通知應(yīng)用A請(qǐng)求消息超時(shí);
代理端104具有重包檢測功能,代理端104將請(qǐng)求消息唯一標(biāo)識(shí)和回應(yīng)包關(guān)聯(lián)起來,在發(fā)送線程構(gòu)造回應(yīng)包后將回應(yīng)包存儲(chǔ)起來。如果有同樣唯一標(biāo)識(shí)的請(qǐng)求包來到,將不通知應(yīng)用B105,直接返回回應(yīng)包。實(shí)施例2 :下面是結(jié)合編譯工具gSOAP和本方法開發(fā)異步通訊SOAP API的實(shí)施例。gSOAP編譯工具可以自動(dòng)生成開發(fā)Soap協(xié)議所需要的樁和框架程序。樁是放在客戶端的一個(gè)“代理”,框架是放在服務(wù)器端的一個(gè)“代理”。樁中聲明了一個(gè)函數(shù),但其中的內(nèi)容并不是具體的算法,而是一系列網(wǎng)絡(luò)連接的協(xié)議,自動(dòng)地去查找框架所在的主機(jī),而后與其交換數(shù)據(jù),并得到返回值的一系列代碼。此時(shí)客戶端的進(jìn)程只需要去調(diào)樁中的函數(shù),即可實(shí)現(xiàn)與遠(yuǎn)端服務(wù)器的數(shù)據(jù)交換,這樣便保證了數(shù)據(jù)傳輸對(duì)于應(yīng)用進(jìn)程的透明性。gSOAP生成的樁代碼的處理流程為
1.初始化運(yùn)行環(huán)境實(shí)例;
2.構(gòu)造請(qǐng)求消息頭和實(shí)體;
3.連接并完成消息發(fā)送;
4.等待接收回應(yīng)消息;
5.解析回應(yīng)消息頭和實(shí)體,獲得返回結(jié)果;
6.關(guān)閉連接。使用gSOAP產(chǎn)生的框架需要先在應(yīng)用程序上啟動(dòng)監(jiān)聽端口,初始化運(yùn)行環(huán)境實(shí)例,并等待連接。當(dāng)一個(gè)連接來到以后,調(diào)用框架提供的方法來進(jìn)行處理。gSOAP生成的框架代碼的處理流程為
I.接收請(qǐng)求包;2.解析請(qǐng)求包,獲得請(qǐng)求信息,激活回調(diào)函數(shù);
3.回調(diào)函數(shù)返回,獲得返回消息,構(gòu)造返回包;
4.發(fā)送返回包。使用本發(fā)明的異步通訊組件,結(jié)合樁和框架的代碼,開發(fā)異步通訊SOAP API。這個(gè)API包括管理端和代理端兩個(gè)不同的部分。應(yīng)用A調(diào)用管理端異步發(fā)送接口發(fā)送Soap消息給對(duì)端,通過管理端回調(diào)函數(shù)接收返回的Soap消息。管理端的處理流程為
1.異步發(fā)送接口使用樁代碼的處理流程I初始化運(yùn)行環(huán)境實(shí)例,將需要發(fā)送的信息放入發(fā)送隊(duì)列;
2.發(fā)送線程使用樁代碼的處理流程2構(gòu)造發(fā)送包,并將發(fā)送包和回調(diào)函數(shù)放入管理端緩存區(qū),使用樁代碼的處理流程3將消息發(fā)送出去;
3.接收線程使用樁代碼的處理流程4收到一個(gè)回應(yīng)包,使用樁代碼的處理流程5解析這個(gè)回應(yīng)包,將解析后的消息放入接收隊(duì)列;
4.工作線程從接收隊(duì)列中取出消息,到管理端緩存區(qū)中尋找發(fā)送信息上下文,并激活回調(diào)函數(shù),在回調(diào)函數(shù)中API將提供發(fā)送的全部信息和收到的全部信息;
5.監(jiān)視線程監(jiān)視管理端緩存區(qū)中已發(fā)送的消息,如果返回超時(shí),將重發(fā)。多次重復(fù)仍然無返回,則激活回調(diào)函數(shù)。在回調(diào)函數(shù)中API將提供發(fā)送的全部信息和超時(shí)標(biāo)志。代理端的接收線程啟動(dòng)監(jiān)聽端口,初始化運(yùn)行環(huán)境實(shí)例,并等待連接。當(dāng)一個(gè)連接來到時(shí),代理端的處理流程為
1.接收線程使用框架代碼的處理流程I接收請(qǐng)求包,在重包檢測區(qū)中檢測是否為重發(fā)包,是則使用框架代碼的處理流程4發(fā)送回應(yīng)包,否則請(qǐng)求包放入接收隊(duì)列;
2.工作線程使用框架代碼的處理流程2處理請(qǐng)求包,并激活回調(diào)函數(shù);
3.回調(diào)函數(shù)將請(qǐng)求包放入代理端緩存區(qū)中,代理緩存區(qū)會(huì)返回一個(gè)唯一標(biāo)識(shí),回調(diào)函數(shù)將請(qǐng)求消息和代理緩存區(qū)唯一標(biāo)識(shí)通知給應(yīng)用B ;
4.應(yīng)用B在處理完請(qǐng)求消息后,調(diào)用異步返回接口,使用代理端緩存區(qū)唯一標(biāo)識(shí)從緩存區(qū)中找到這個(gè)請(qǐng)求包的信息,使用框架代碼的處理流程3構(gòu)造回應(yīng)包,并將放入重包檢測區(qū)和發(fā)送隊(duì)列;
5.發(fā)送線程使用框架代碼的處理流程4將回應(yīng)包返回。經(jīng)過上述轉(zhuǎn)化處理,異步通訊組件可以將一個(gè)同步通訊的SOAP協(xié)議API,變?yōu)橐粋€(gè)可靠、高效的異步通訊的SOAP協(xié)議API。還可以應(yīng)用到其它的協(xié)議中,方便實(shí)現(xiàn)更多高效、可靠的異步通訊協(xié)議API。所以本發(fā)明具有使用異步通訊組件開發(fā)異步通訊的協(xié)議API,實(shí)現(xiàn)運(yùn)用多種協(xié)議進(jìn)行數(shù)據(jù)通訊,編程方便快捷,適應(yīng)性強(qiáng)等特征。
權(quán)利要求
1.一種異步通訊的實(shí)現(xiàn)方法,其特征包括 (A)在應(yīng)用A與應(yīng)用B之間設(shè)置異步通訊組件,所述異步通訊組件分為管理端和代理端兩個(gè)部分,所述管理端放置在主動(dòng)發(fā)送的應(yīng)用A上,所述代理端放置在被動(dòng)接收的應(yīng)用B上; (B)所述管理端和代理端之間通過協(xié)議棧進(jìn)行異步通訊。
2.根據(jù)權(quán)利要求I所述一種異步通訊的實(shí)現(xiàn)方法,其特征在于所述管理端包括一個(gè)異步發(fā)送接口、一個(gè)發(fā)送隊(duì)列、一個(gè)接收隊(duì)列、一組發(fā)送和接收線程、一個(gè)管理端緩存區(qū)、一組工作線程及一個(gè)監(jiān)視線程;所述代理端包括一個(gè)接收隊(duì)列、一個(gè)發(fā)送隊(duì)列、一組接收和發(fā)送線程、一組工作線程、一個(gè)代理端緩存區(qū)、一個(gè)重包檢測區(qū)和一個(gè)異步返回接口。
3.根據(jù)權(quán)利要求2所述一種異步通訊的實(shí)現(xiàn)方法,其特征在于應(yīng)用A不斷調(diào)用異步發(fā)送接口將各種請(qǐng)求消息發(fā)送給代理端,其中一種類型的請(qǐng)求消息關(guān)聯(lián)一個(gè)管理端回調(diào)函數(shù),從代理端收到返回消息后,工作線程對(duì)各種返回消息進(jìn)行多路分解,調(diào)用不同的管理端回調(diào)函數(shù),完成消息的返回處理,監(jiān)視線程負(fù)責(zé)監(jiān)測各種異常情況導(dǎo)致的消息超時(shí),并進(jìn)行消息重發(fā)。
4.根據(jù)權(quán)利要求2所述一種異步通訊的實(shí)現(xiàn)方法,其特征在于所述代理端收到各種請(qǐng)求消息后,其中一種類型的請(qǐng)求消息關(guān)聯(lián)了一個(gè)代理端回調(diào)函數(shù),代理端調(diào)用不同的代理端回調(diào)函數(shù),同步模式下,代理端回調(diào)函數(shù)直接完成消息的處理并返回,異步模式下,代理端回調(diào)函數(shù)將消息放入應(yīng)用B的消息處理隊(duì)列。
5.根據(jù)權(quán)利要求1,2,3或4所述一種異步通訊的實(shí)現(xiàn)方法,其特征在于,所述管理端的發(fā)送流程包括 (1)應(yīng)用A以非阻塞方式調(diào)用異步發(fā)送接口發(fā)送請(qǐng)求消息,并將請(qǐng)求消息放入管理端發(fā)送隊(duì)列; (2)管理端發(fā)送線程從發(fā)送隊(duì)列中取出請(qǐng)求消息,將請(qǐng)求消息和關(guān)聯(lián)的管理端回調(diào)函數(shù)放入管理端緩存區(qū),并將請(qǐng)求消息發(fā)送出去; 所述代理端的接收流程包括 (3)代理端接收線程收到請(qǐng)求消息,并放入代理端接收隊(duì)列; (4)代理端工作線程從接收隊(duì)列中取出消息,根據(jù)消息類型調(diào)用它們的代理端回調(diào)函數(shù),如果是同步操作,回調(diào)函數(shù)中完成消息處理,立即返回給管理端,如果是異步操作,回調(diào)函數(shù)并不完成消息處理,也不立即返回管理端,而是將請(qǐng)求消息、發(fā)送端地址等信息存入代理端緩存區(qū),并獲得一個(gè)代理端緩存區(qū)唯一標(biāo)識(shí),然后將消息和代理端緩存區(qū)唯一標(biāo)識(shí)一起放入應(yīng)用B的消息處理隊(duì)列; 所述代理端的返回流程包括 (5)應(yīng)用B從消息處理隊(duì)列中獲得消息,進(jìn)行處理,處理完畢后,調(diào)用代理端異步返回接口 ; (6)代理端異步返回接口根據(jù)代理端緩存區(qū)唯一標(biāo)識(shí)獲得請(qǐng)求消息及上下文,構(gòu)造返回消息,然后將返回消息放入代理端發(fā)送隊(duì)列; (7)代理端發(fā)送線程從發(fā)送隊(duì)列中取出返回消息,并返回給管理端; 所述管理端的接收流程包括 (8)管理端接收線程收到返回消息,放入管理端接收隊(duì)列;(9)管理端工作線程從接收隊(duì)列中取出返回消息,管理端工作線程根據(jù)返回消息的唯一標(biāo)識(shí),在管理端緩沖區(qū)中找到之前的請(qǐng)求消息和回調(diào)函數(shù),然后將返回消息、請(qǐng)求消息通知給相應(yīng)的管理端回調(diào)函數(shù); (10)管理端回調(diào)函數(shù)完成返回消息的處理。
6.根據(jù)權(quán)利要求2所述一種異步通訊的實(shí)現(xiàn)方法,其特征在于所述監(jiān)視線程,對(duì)整個(gè)緩存區(qū)進(jìn)行周期掃描,監(jiān)測管理端緩存區(qū)中消息超時(shí)的情況,每個(gè)請(qǐng)求消息都有一個(gè)超時(shí)時(shí)間和最大重發(fā)次數(shù),如果發(fā)現(xiàn)超時(shí)包,將進(jìn)行重發(fā);重發(fā)超過最大次數(shù)時(shí),將激活管理端回調(diào)函數(shù),通知應(yīng)用A請(qǐng)求消息超時(shí)。
7.根據(jù)權(quán)利要求5所述一種異步通訊的實(shí)現(xiàn)方法,其特征在于在所述代理端設(shè)置有重包檢測功能,將請(qǐng)求消息唯一標(biāo)識(shí)和回應(yīng)包關(guān)聯(lián)起來,在發(fā)送線程構(gòu)造回應(yīng)包后將回應(yīng)包存儲(chǔ)在重包檢測區(qū),如果有同樣唯一標(biāo)識(shí)的請(qǐng)求包來到,將不通知應(yīng)用B,直接返回回應(yīng)包。
全文摘要
本發(fā)明公開了一種異步通訊的實(shí)現(xiàn)方法,它使用異步通訊組件,使用多種應(yīng)用協(xié)議進(jìn)行數(shù)據(jù)通訊,包括在應(yīng)用A與應(yīng)用B之間設(shè)置異步通訊組件,異步通訊組件分為管理端和代理端兩個(gè)部分,管理端放置在主動(dòng)發(fā)送的應(yīng)用A上,代理端放置在被動(dòng)接收的應(yīng)用B上;管理端和代理端之間通過協(xié)議棧進(jìn)行異步通訊。
文檔編號(hào)H04L29/06GK102946376SQ20111038702
公開日2013年2月27日 申請(qǐng)日期2011年11月29日 優(yōu)先權(quán)日2011年11月29日
發(fā)明者黃宇殊, 楊亞鵬 申請(qǐng)人:Ut斯達(dá)康通訊有限公司