本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其涉及一種遠(yuǎn)程過程調(diào)用的方法、裝置及計(jì)算機(jī)設(shè)備。
背景技術(shù):
遠(yuǎn)程過程調(diào)用,就是一個(gè)進(jìn)程調(diào)用另外一個(gè)進(jìn)程所提供的方法,適用于進(jìn)程間的通信。
現(xiàn)有技術(shù)中在遠(yuǎn)程過程調(diào)用中,無法靈活地進(jìn)行線程調(diào)度分配,易引起多線程沖突導(dǎo)致程序崩潰問題;而在獲取利用某些異步與互斥的方法來解決多線程問題時(shí),又會(huì)降低程序性能。
基于此,本發(fā)明提供一種遠(yuǎn)程過程調(diào)用的方法、裝置及計(jì)算機(jī)設(shè)備,以解決現(xiàn)有技術(shù)中的上述問題。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)存在的問題,本發(fā)明實(shí)施例提供了一種遠(yuǎn)程過程調(diào)用的方法、裝置及計(jì)算機(jī)設(shè)備,用于解決現(xiàn)有技術(shù)中,在進(jìn)行遠(yuǎn)程過程調(diào)用時(shí),無法靈活地進(jìn)行線程調(diào)度分配,易引起多線程沖突導(dǎo)致程序崩潰,導(dǎo)致工作效率下降的技術(shù)問題。
本發(fā)明提供一種遠(yuǎn)程過程調(diào)用的方法,所述方法包括:
將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;
接收目標(biāo)調(diào)用請求;
基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);
若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);
確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);
利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果。
上述方案中,所述若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),則在主線程中調(diào)用所述目標(biāo)異步處理函數(shù),包括:
獲取用于指示網(wǎng)絡(luò)連接成功后的第一標(biāo)識符、所述目標(biāo)調(diào)用請求中的參數(shù)信息和所述目標(biāo)調(diào)用請求中的第二標(biāo)識符;
基于所述參數(shù)信息、所述第一標(biāo)識符及所述第二標(biāo)識符生成上下文環(huán)境塊;
將所述第一標(biāo)識符設(shè)置為所述目標(biāo)異步處理函數(shù)的第一個(gè)參數(shù),將所述參數(shù)信息設(shè)置為所述目標(biāo)異步處理函數(shù)的第二個(gè)參數(shù),將所述參數(shù)列表中的參數(shù)個(gè)數(shù)設(shè)置為所述目標(biāo)異步處理函數(shù)的第三個(gè)參數(shù),將所述上下文環(huán)境塊設(shè)置為所述目標(biāo)異步處理函數(shù)的第四個(gè)參數(shù);
將所述目標(biāo)異步處理函數(shù)投遞至主線程中,在主線程中調(diào)用所述目標(biāo)異步處理函數(shù)。
上述方案中,所述基于所述參數(shù)信息及所述標(biāo)識符生成上下文環(huán)境塊,包括:
將所述參數(shù)信息賦值給所述上下文環(huán)境塊的參數(shù)字段;
將所述第一標(biāo)識符賦值給所述上下文環(huán)境的第一標(biāo)識字段;
將所述第二標(biāo)識符賦值給所述上下文環(huán)境塊的第二標(biāo)識字段。
上述方案中,所述利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果,包括:
將第二標(biāo)識符及所述執(zhí)行結(jié)果序列化為一個(gè)網(wǎng)絡(luò)消息;
將所述網(wǎng)絡(luò)消息及上下文環(huán)境塊設(shè)置到所述獲取函數(shù)rpccompleteasyncprocedure中的相應(yīng)參數(shù)中;
利用所述獲取函數(shù)rpccompleteasyncprocedure發(fā)送所述執(zhí)行結(jié)果。
上述方案中,所述獲取并發(fā)送執(zhí)行結(jié)果后,還包括:刪除上下文環(huán)境塊。
上述方案中,若在所述全局字典中沒有查找到目標(biāo)異步處理函數(shù),還包括:
返回結(jié)果集,所述結(jié)果集中包括用于指示無查找結(jié)果的指示值。
上述方案中,所述異步處理函數(shù)的模型包括:
void(*rpcasyncprocedure)(void*caller,irpcargument**args,intnumargs,rpcasyncprocedurecontextcontext);其中,
所述rpcasyncprocedure為所述異步處理函數(shù)的名稱,所述caller,irpcargument為標(biāo)識參數(shù);所述args為所述目標(biāo)調(diào)用請求中的參數(shù)信息;所述numargs為所述args參數(shù)的個(gè)數(shù);所述rpcasyncprocedurecontext為上下文環(huán)境塊,所述context為用于記錄在所述上下文環(huán)境塊中與當(dāng)前響應(yīng)相關(guān)聯(lián)的上下文環(huán)境的參數(shù)。
本發(fā)明還提供一種遠(yuǎn)程過程調(diào)用的裝置,所述裝置包括:
注冊單元,用于將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;
接收單元,用于接收目標(biāo)調(diào)用請求;
判斷單元,用于基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);
調(diào)用單元,用于在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);
執(zhí)行單元,用于確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果。
本發(fā)明還提供一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)以下步驟:
將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;
接收目標(biāo)調(diào)用請求;
基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);
若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);
確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);
利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果。
本發(fā)明還提供一種遠(yuǎn)程過程調(diào)用的計(jì)算機(jī)設(shè)備,包括:
至少一個(gè)處理器;以及
與所述處理器通信連接的至少一個(gè)存儲器,其中,
所述存儲器存儲有可被所述處理器執(zhí)行的程序指令,所述處理器調(diào)用所述程序指令能夠執(zhí)行如上述任一所述的方法。
本發(fā)明提供了一種遠(yuǎn)程過程調(diào)用的方法、裝置及計(jì)算機(jī)設(shè)備,所述方法包括:將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;接收目標(biāo)調(diào)用請求;基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果;如此,可以根據(jù)目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量分配相應(yīng)的子線程,以能靈活地進(jìn)行線程調(diào)度分配,避免造成多線程沖突導(dǎo)致程序崩潰,確保了工作效率。
附圖說明
圖1為本發(fā)明實(shí)施例一提供的遠(yuǎn)程過程調(diào)用的方法流程示意圖;
圖2為本發(fā)明實(shí)施例二提供的遠(yuǎn)程過程調(diào)用的裝置結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例三提供的遠(yuǎn)程過程調(diào)用的計(jì)算機(jī)設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了解決現(xiàn)有技術(shù)中,在進(jìn)行遠(yuǎn)程過程調(diào)用時(shí),無法靈活地進(jìn)行線程調(diào)度分配,易引起多線程沖突導(dǎo)致程序崩潰,導(dǎo)致工作效率下降的技術(shù)問題,本發(fā)明提供了一種遠(yuǎn)程過程調(diào)用的方法、裝置及計(jì)算機(jī)設(shè)備,所述方法包括:將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;接收目標(biāo)調(diào)用請求;基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果。
下面通過附圖及具體實(shí)施例對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)說明。
實(shí)施例一
本實(shí)施例提供一種遠(yuǎn)程過程調(diào)用的方法,如圖1所示,所述方法包括:
s101,將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;
本步驟中,在接收調(diào)用請求之前,需要調(diào)用rpcregisterprocedure函數(shù),將預(yù)先約定的遠(yuǎn)程方法的名稱及該遠(yuǎn)程方法對應(yīng)的異步處理函數(shù)注冊至全局字典dict中,以能在接收到調(diào)用請求時(shí),可以直接在全局字典dict中查找相應(yīng)的異步處理函數(shù),快速搭建遠(yuǎn)程過程調(diào)用模型,提高處理效率。所述預(yù)先約定的遠(yuǎn)程方法為調(diào)用端與被調(diào)用端預(yù)先約定的。
這里,所述異步處理函數(shù)的模型包括:
void(*rpcasyncprocedure)(void*caller,irpcargument**args,intnumargs,rpcasyncprocedurecontextcontext);其中,所述rpcasyncprocedure為所述異步處理函數(shù)的名稱,所述caller,irpcargument為標(biāo)識參數(shù);所述args為所述目標(biāo)調(diào)用請求中的參數(shù)信息;所述numargs為所述args參數(shù)的個(gè)數(shù);所述rpcasyncprocedurecontext為上下文環(huán)境塊,所述context為用于記錄在所述上下文環(huán)境塊中與當(dāng)前響應(yīng)相關(guān)聯(lián)的上下文環(huán)境的參數(shù)。
s102,接收目標(biāo)調(diào)用請求;基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);
本步驟中,將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典dict中后,接收調(diào)用端通過調(diào)用rpccallprocedure函數(shù)發(fā)送的目標(biāo)調(diào)用請求,基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù)。
具體地,接收目標(biāo)調(diào)用請求后,也就是接收到rpcmessage消息時(shí),獲取遠(yuǎn)程方法的名稱,基于所述名稱,判斷在所述全局字典中是否能查找到所述調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù)。這里,rpcmessage消息中的procedure字段代表要調(diào)用的遠(yuǎn)程方法名,根據(jù)該方法名在全局字典dict中查找目標(biāo)異步處理函數(shù)rpcasyncprocedure。
s103,若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);
本步驟中,若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù)rpcasyncprocedure,在主線程中調(diào)用所述目標(biāo)異步處理函數(shù)rpcasyncprocedure。
首先基于回調(diào)函數(shù),獲取用于指示網(wǎng)絡(luò)連接成功后的第一標(biāo)識符;這里,當(dāng)調(diào)用端與被調(diào)用端建立起網(wǎng)絡(luò)連接后,就生成了第一標(biāo)識符,來唯一標(biāo)識這個(gè)調(diào)用端,所述第一標(biāo)識符即為session。
然后調(diào)用getrpcargsfrommessage函數(shù)從rpcmessage消息中獲取到獲取所述目標(biāo)調(diào)用請求中所有的參數(shù)信息。具體是通過調(diào)用getrpcargsfrommessage函數(shù)從rpcmessage消息中獲取到irpcargument結(jié)構(gòu),然后調(diào)用irpcargument結(jié)構(gòu)中的參數(shù)獲取方法i32value,獲取所述目標(biāo)調(diào)用請求中的參數(shù)信息。
然后再獲取所述目標(biāo)調(diào)用請求中的第二標(biāo)識符;所述標(biāo)第二識符是目標(biāo)調(diào)用請求的唯一標(biāo)識符,用于與其他調(diào)用請求進(jìn)行區(qū)分,避免混淆;需要說明的是,每個(gè)調(diào)用請求都會(huì)存在一個(gè)唯一的標(biāo)識符。
具體地,當(dāng)調(diào)用端調(diào)用rpccallprocedure函數(shù)向被調(diào)用端發(fā)送目標(biāo)調(diào)用請求時(shí),會(huì)生成第二標(biāo)識符,并將這個(gè)標(biāo)識符寫入rpcmessage消息中g(shù)id字段中,當(dāng)被調(diào)用端接收到rpcmessage消息后,即可從gid字段獲取所述目標(biāo)調(diào)用請求中的第二標(biāo)識符。
當(dāng)獲取到參數(shù)信息、第一標(biāo)識符及第二標(biāo)識符后,基于所述參數(shù)信息、所述第一標(biāo)識符及所述第二標(biāo)識符生成異步上下文環(huán)境塊。
具體地,將所述參數(shù)信息賦值給所述上下文環(huán)境塊的參數(shù)字段(即arg字段);將所述第一標(biāo)識符賦值給所述上下文環(huán)境的第一標(biāo)識字段(gid字段);將所述第二標(biāo)識符賦值給所述上下文環(huán)境塊的第二標(biāo)識字段(session字段)。這樣就生成了一個(gè)異步上下文環(huán)境塊。
將所述第一標(biāo)識符設(shè)置為所述目標(biāo)異步處理函數(shù)的第一個(gè)參數(shù),將所述參數(shù)信息設(shè)置為所述目標(biāo)異步處理函數(shù)的第二個(gè)參數(shù),將所述參數(shù)列表中的參數(shù)個(gè)數(shù)設(shè)置為所述目標(biāo)異步處理函數(shù)的第三個(gè)參數(shù),將所述上下文環(huán)境塊設(shè)置為所述目標(biāo)異步處理函數(shù)的第四個(gè)參數(shù);其中,所述第一個(gè)參數(shù)即為所述caller,irpcargument參數(shù);所述第二個(gè)為參數(shù)args參數(shù);所述第三個(gè)參數(shù)為所述numargs參數(shù);所述第四個(gè)參數(shù)為rpcasyncprocedurecontext參數(shù)。
將所述目標(biāo)異步處理函數(shù)投遞至主線程中,在主線程中調(diào)用所述目標(biāo)異步處理函數(shù)。
s104,確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果。
本步驟中,在主線程調(diào)用所述目標(biāo)異步處理函數(shù)時(shí),為了避免目標(biāo)異步處理函數(shù)待處理的數(shù)據(jù)量過大,引起多線程沖突導(dǎo)致程序崩潰的現(xiàn)象,還要確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,并根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);其中,所述待處理任務(wù)可以包括:訪問數(shù)據(jù)庫或計(jì)算操作等數(shù)據(jù)流較大的任務(wù)。
當(dāng)所述目標(biāo)異步處理函數(shù)執(zhí)行完畢后,為了進(jìn)一步提高了目標(biāo)異步處理函數(shù)的處理性能,無需在目標(biāo)異步處理函數(shù)中返回執(zhí)行結(jié)果,而需要利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果至調(diào)用端。
當(dāng)獲取到執(zhí)行結(jié)果后,將第二標(biāo)識符及所述執(zhí)行結(jié)果序列化為一個(gè)網(wǎng)絡(luò)消息;具體是調(diào)用buildrpcmessagefrom方法將執(zhí)行結(jié)果的結(jié)果集及第二標(biāo)識符列化為一個(gè)網(wǎng)絡(luò)消息,并將網(wǎng)絡(luò)消息中的gid字段設(shè)置為標(biāo)識符,將網(wǎng)絡(luò)消息中的rpctype字段設(shè)置為rpc_message_response值,用于表示該網(wǎng)絡(luò)消息是一個(gè)遠(yuǎn)程響應(yīng)消息。
序列化為網(wǎng)絡(luò)消息后,將所述網(wǎng)絡(luò)消息及所述上下文環(huán)境塊設(shè)置到所述獲取函數(shù)rpccompleteasyncprocedure中的相應(yīng)參數(shù)中;利用所述獲取函數(shù)rpccompleteasyncprocedure發(fā)送所述執(zhí)行結(jié)果。這樣就無需在所述異步處理函數(shù)返回執(zhí)行結(jié)果,進(jìn)一步提高了所述異步處理函數(shù)的性能。
進(jìn)一步地,所述獲取并發(fā)送執(zhí)行結(jié)果后,為了避免資源泄漏,還包括:刪除(釋放)上下文環(huán)境塊rpcasyncprocedurecontext。
另外,若在全局字典dict中沒有查找到目標(biāo)異步處理函數(shù),還包括:返回結(jié)果集,所述結(jié)果集中包括用于指示無查找結(jié)果的指示值,所述指示值的內(nèi)容為可以error_rpc_not_found,用于告知調(diào)用端,被調(diào)用端沒有該遠(yuǎn)程過程方法。
實(shí)施例二
相應(yīng)于實(shí)施例一,本實(shí)施例提供一種遠(yuǎn)程過程調(diào)用的裝置,如圖2所示,所述遠(yuǎn)程過程調(diào)用裝置包括:注冊單元21、接收單元22、判斷單元23、調(diào)用單元24及執(zhí)行單元25;其中,
在接收調(diào)用請求之前,所述注冊單元21需要調(diào)用rpcregisterprocedure函數(shù),將預(yù)先預(yù)定的遠(yuǎn)程方法的名稱及該遠(yuǎn)程方法對應(yīng)的異步處理函數(shù)注冊至全局字典dict中,以能在接收到調(diào)用請求時(shí),可以直接在全局字典dict中查找相應(yīng)的異步處理函數(shù),快速搭建遠(yuǎn)程過程調(diào)用模型,提高處理效率。所述預(yù)先約定的遠(yuǎn)程方法為調(diào)用端與被調(diào)用端預(yù)先約定的。
這里,所述異步處理函數(shù)的模型包括:
void(*rpcasyncprocedure)(void*caller,irpcargument**args,intnumargs,rpcasyncprocedurecontextcontext);其中,所述rpcasyncprocedure為所述異步處理函數(shù)的名稱,所述caller,irpcargument為標(biāo)識參數(shù);所述args為所述目標(biāo)調(diào)用請求中的參數(shù)信息;所述numargs為所述args參數(shù)的個(gè)數(shù);所述rpcasyncprocedurecontext為上下文環(huán)境塊,所述context為用于記錄在所述上下文環(huán)境塊中與當(dāng)前響應(yīng)相關(guān)聯(lián)的上下文環(huán)境的參數(shù)。
所述注冊單元21將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的遠(yuǎn)程方法對應(yīng)的異步處理函數(shù)注冊至全局字典dict中后,所述接收單元22接收調(diào)用端數(shù)發(fā)送的目標(biāo)調(diào)用請求,基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù)。
具體地,所述接收單元22接收目標(biāo)調(diào)用請求后,也就是接收到rpcmessage消息時(shí),所述判斷單元23獲取遠(yuǎn)程方法的名稱,基于所述名稱,判斷在所述全局字典中是否能查找到所述調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù)。這里,rpcmessage消息中的procedure字段代表要調(diào)用的遠(yuǎn)程方法名,根據(jù)該方法名在全局字典dict中查找目標(biāo)異步處理函數(shù)rpcasyncprocedure。
若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù)rpcasyncprocedure,所述調(diào)用單元24用于在主線程中調(diào)用所述目標(biāo)異步處理函數(shù)rpcasyncprocedure。
具體地,所述調(diào)用單元24首先基于回調(diào)函數(shù),獲取用于指示網(wǎng)絡(luò)連接成功后的第一標(biāo)識符;這里,當(dāng)調(diào)用端與被調(diào)用端建立起網(wǎng)絡(luò)連接后,就生成了第一標(biāo)識符,來唯一標(biāo)識這個(gè)調(diào)用端,所述第一標(biāo)識符即為session。
然后所述調(diào)用單元24調(diào)用getrpcargsfrommessage函數(shù)從rpcmessage消息中獲取到獲取所述目標(biāo)調(diào)用請求中所有的參數(shù)信息。具體是通過調(diào)用getrpcargsfrommessage函數(shù)從rpcmessage消息中獲取到irpcargument結(jié)構(gòu),然后調(diào)用irpcargument結(jié)構(gòu)中的參數(shù)獲取方法i32value,獲取所述目標(biāo)調(diào)用請求中的參數(shù)信息。
然后所述調(diào)用單元24再獲取所述目標(biāo)調(diào)用請求中的第二標(biāo)識符;所述標(biāo)第二識符是目標(biāo)調(diào)用請求的唯一標(biāo)識符,用于與其他調(diào)用請求進(jìn)行區(qū)分,避免混淆;需要說明的是,每個(gè)調(diào)用請求都會(huì)存在一個(gè)唯一的標(biāo)識符。
具體地,當(dāng)調(diào)用端調(diào)用rpccallprocedure函數(shù)向被調(diào)用端發(fā)送目標(biāo)調(diào)用請求時(shí),會(huì)生成第二標(biāo)識符,并將這個(gè)標(biāo)識符寫入rpcmessage消息中g(shù)id字段中,當(dāng)被調(diào)用端接收到rpcmessage消息后,所述調(diào)用單元24即可從gid字段獲取所述目標(biāo)調(diào)用請求中的第二標(biāo)識符。
當(dāng)所述調(diào)用單元24獲取到參數(shù)信息、第一標(biāo)識符及第二標(biāo)識符后,基于所述參數(shù)信息、所述第一標(biāo)識符及所述第二標(biāo)識符生成異步上下文環(huán)境塊。
具體地,將所述參數(shù)信息賦值給所述上下文環(huán)境塊的參數(shù)字段(即arg字段);將所述第一標(biāo)識符賦值給所述上下文環(huán)境的第一標(biāo)識字段(gid字段);將所述第二標(biāo)識符賦值給所述上下文環(huán)境塊的第二標(biāo)識字段(session字段)。這樣就生成了一個(gè)異步上下文環(huán)境塊。
將所述第一標(biāo)識符設(shè)置為所述目標(biāo)異步處理函數(shù)的第一個(gè)參數(shù),將所述參數(shù)信息設(shè)置為所述目標(biāo)異步處理函數(shù)的第二個(gè)參數(shù),將所述參數(shù)列表中的參數(shù)個(gè)數(shù)設(shè)置為所述目標(biāo)異步處理函數(shù)的第三個(gè)參數(shù),將所述上下文環(huán)境塊設(shè)置為所述目標(biāo)異步處理函數(shù)的第四個(gè)參數(shù);其中,所述第一個(gè)參數(shù)即為所述caller,irpcargument參數(shù);所述第二個(gè)參數(shù)為args參數(shù);所述第三個(gè)參數(shù)為所述numargs參數(shù);所述第四個(gè)參數(shù)為rpcasyncprocedurecontext參數(shù)。
所述調(diào)用單元24將所述目標(biāo)異步處理函數(shù)投遞至主線程中,在主線程中調(diào)用所述目標(biāo)異步處理函數(shù)。
在主線程調(diào)用所述目標(biāo)異步處理函數(shù)時(shí),為了避免目標(biāo)異步處理函數(shù)待處理的數(shù)據(jù)量過大,引起多線程沖突導(dǎo)致程序崩潰的現(xiàn)象,所述執(zhí)行單元25還要確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,并根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);其中,所述待處理任務(wù)可以包括:訪問數(shù)據(jù)庫或計(jì)算操作等數(shù)據(jù)流較大的任務(wù)。
當(dāng)所述目標(biāo)異步處理函數(shù)執(zhí)行完畢后,為了進(jìn)一步提高了目標(biāo)異步處理函數(shù)的處理性能,無需在目標(biāo)異步處理函數(shù)中返回執(zhí)行結(jié)果,所述執(zhí)行單元25需要利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果至調(diào)用端。
當(dāng)獲取到執(zhí)行結(jié)果后,所述執(zhí)行單元25將第二標(biāo)識符及所述執(zhí)行結(jié)果序列化為一個(gè)網(wǎng)絡(luò)消息;具體是調(diào)用buildrpcmessagefrom方法將執(zhí)行結(jié)果的結(jié)果集及第二標(biāo)識符列化為一個(gè)網(wǎng)絡(luò)消息,并將網(wǎng)絡(luò)消息中的gid字段設(shè)置為標(biāo)識符,將網(wǎng)絡(luò)消息中的rpctype字段設(shè)置為rpc_message_response值,用于表示該網(wǎng)絡(luò)消息是一個(gè)遠(yuǎn)程響應(yīng)消息。
序列化為網(wǎng)絡(luò)消息后,所述執(zhí)行單元25將所述網(wǎng)絡(luò)消息及所述上下文環(huán)境塊設(shè)置到所述獲取函數(shù)rpccompleteasyncprocedure中的相應(yīng)參數(shù)中;利用所述獲取函數(shù)rpccompleteasyncprocedure發(fā)送所述執(zhí)行結(jié)果。這樣就無需在所述異步處理函數(shù)返回執(zhí)行結(jié)果,進(jìn)一步提高了所述異步處理函數(shù)的性能。
進(jìn)一步地,所述獲取并發(fā)送執(zhí)行結(jié)果后,為了避免資源泄漏,所述執(zhí)行單元25還用于:刪除(釋放)上下文環(huán)境塊rpcasyncprocedurecontext。
另外,若在全局字典dict中沒有查找到目標(biāo)異步處理函數(shù),所述執(zhí)行單元25還用于:返回結(jié)果集,所述結(jié)果集中包括用于指示無查找結(jié)果的指示值,所述指示值的內(nèi)容為可以error_rpc_not_found,用于告知調(diào)用端,被調(diào)用端沒有該遠(yuǎn)程過程方法。
實(shí)施例三
實(shí)際應(yīng)用中,利用實(shí)施例一提供的調(diào)用方法及實(shí)施例二提供的調(diào)用裝置對add遠(yuǎn)程方法進(jìn)行調(diào)用時(shí),具體實(shí)現(xiàn)如下:
被調(diào)用端在接收調(diào)用請求之前,調(diào)用rpcregisterprocedure函數(shù),將預(yù)先預(yù)定的add遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典dict中,以能在接收到調(diào)用請求時(shí),可以直接在全局字典dict中查找add遠(yuǎn)程方法對應(yīng)的異步處理函數(shù),快速搭建遠(yuǎn)程過程調(diào)用模型,提高處理效率。
這里,所述異步處理函數(shù)的模型包括:
void(*rpcasyncprocedure)(void*caller,irpcargument**args,intnumargs,rpcasyncprocedurecontextcontext);其中,所述rpcasyncprocedure為所述異步處理函數(shù)的名稱,所述caller,irpcargument為標(biāo)識參數(shù);所述args為所述目標(biāo)調(diào)用請求中的參數(shù)信息;所述numargs為所述args參數(shù)的個(gè)數(shù);所述rpcasyncprocedurecontext為上下文環(huán)境塊,所述context為用于記錄在所述上下文環(huán)境塊中與當(dāng)前響應(yīng)相關(guān)聯(lián)的上下文環(huán)境的參數(shù)。比如,在調(diào)用add遠(yuǎn)程方法時(shí),調(diào)用端將提供兩個(gè)參數(shù):第一個(gè)參數(shù)是數(shù)值1,第二個(gè)參數(shù)是數(shù)值2,那么,參數(shù)信息即為數(shù)值1和數(shù)值2,而numargs的值則為2。
然后,接收調(diào)用端通過調(diào)用rpccallprocedure函數(shù)發(fā)送的調(diào)用add遠(yuǎn)程方法的目標(biāo)調(diào)用請求,基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù)。
具體地,接收調(diào)用端收目標(biāo)調(diào)用請求后,也就是接收到rpcmessage消息時(shí),獲取add遠(yuǎn)程方法的名稱,基于所述名稱,判斷在所述全局字典中是否能查找到所述調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù)。這里,rpcmessage消息中的procedure字段代表要調(diào)用的遠(yuǎn)程方法名,根據(jù)該方法名在全局字典dict中查找目標(biāo)異步處理函rpcasyncprocedure。
若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù)rpcasyncprocedure,在主線程中調(diào)用所述目標(biāo)異步處理函數(shù)rpcasyncprocedure。
首先基于回調(diào)函數(shù),獲取用于指示網(wǎng)絡(luò)連接成功后的第一標(biāo)識符;這里,當(dāng)調(diào)用端與被調(diào)用端建立起網(wǎng)絡(luò)連接后,就生成了第一標(biāo)識符,來唯一標(biāo)識這個(gè)調(diào)用端,所述第一標(biāo)識符即為session。
然后調(diào)用getrpcargsfrommessage函數(shù)從rpcmessage消息中獲取到獲取所述目標(biāo)調(diào)用請求中所有的參數(shù)信息。具體是通過調(diào)用getrpcargsfrommessage函數(shù)從rpcmessage消息中獲取到irpcargument結(jié)構(gòu),然后調(diào)用irpcargument結(jié)構(gòu)中的參數(shù)獲取方法i32value,利用i32value方法獲取第一個(gè)參數(shù)與第二參數(shù)對應(yīng)的數(shù)值,即args[0]->i32value()獲取的值就是1,args[1]->i32value()獲取的值就是2。
然后再獲取所述目標(biāo)調(diào)用請求中的第二標(biāo)識符;所述標(biāo)第二識符是add遠(yuǎn)程方法對應(yīng)的目標(biāo)調(diào)用請求的唯一標(biāo)識符,用于與其他調(diào)用請求進(jìn)行區(qū)分,避免混淆;需要說明的是,每個(gè)調(diào)用請求都會(huì)存在一個(gè)唯一的標(biāo)識符。
具體地,當(dāng)調(diào)用端調(diào)用rpccallprocedure函數(shù)向被調(diào)用端發(fā)送目標(biāo)調(diào)用請求時(shí),會(huì)生成第二標(biāo)識符,并將這個(gè)標(biāo)識符寫入rpcmessage消息中g(shù)id字段中,當(dāng)被調(diào)用端接收到rpcmessage消息后,即可從gid字段獲取所述目標(biāo)調(diào)用請求中的第二標(biāo)識符。
當(dāng)獲取到add遠(yuǎn)程方法中的參數(shù)信息、第一標(biāo)識符及第二標(biāo)識符后,基于所述參數(shù)信息、所述第一標(biāo)識符及所述第二標(biāo)識符生成異步上下文環(huán)境塊。
具體地,將所述參數(shù)信息1和2賦值給所述上下文環(huán)境塊的參數(shù)字段(即arg字段);將所述第一標(biāo)識符賦值給所述上下文環(huán)境的第一標(biāo)識字段(gid字段);將所述第二標(biāo)識符賦值給所述上下文環(huán)境塊的第二標(biāo)識字段(session字段)。這樣就生成了一個(gè)異步上下文環(huán)境塊。
將所述第一標(biāo)識符設(shè)置為所述目標(biāo)異步處理函數(shù)的第一個(gè)參數(shù),將所述參數(shù)信息設(shè)置為所述目標(biāo)異步處理函數(shù)的第二個(gè)參數(shù),將所述參數(shù)列表中的參數(shù)個(gè)數(shù)設(shè)置為所述目標(biāo)異步處理函數(shù)的第三個(gè)參數(shù),將所述上下文環(huán)境塊設(shè)置為所述目標(biāo)異步處理函數(shù)的第四個(gè)參數(shù);其中,所述第一個(gè)參數(shù)即為所述caller,irpcargument參數(shù);所述第二個(gè)參數(shù)args參數(shù);所述第三個(gè)參數(shù)為所述numargs參數(shù);所述第四個(gè)參數(shù)為rpcasyncprocedurecontext參數(shù)。那么,args參數(shù)中第一個(gè)參數(shù)是數(shù)值1,第二個(gè)參數(shù)是數(shù)值2;numargs參數(shù)應(yīng)為2。
然后將所述目標(biāo)異步處理函數(shù)投遞至主線程中,在主線程中調(diào)用所述目標(biāo)異步處理函數(shù)。
具體地,在主線程調(diào)用所述add遠(yuǎn)程方法的目標(biāo)異步處理函數(shù)時(shí),為了避免目標(biāo)異步處理函數(shù)待處理的數(shù)據(jù)量過大,引起多線程沖突導(dǎo)致程序崩潰的現(xiàn)象,還要確定所述目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,并根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);將參數(shù)轉(zhuǎn)換為整數(shù)內(nèi)容,即將第一個(gè)參數(shù)轉(zhuǎn)換為數(shù)值1,將第二個(gè)參數(shù)轉(zhuǎn)換為數(shù)值2,然后執(zhí)行add方法,即執(zhí)行加法運(yùn)算得到執(zhí)行結(jié)果,即執(zhí)行結(jié)果為3。其中,所述待處理任務(wù)可以包括:訪問數(shù)據(jù)庫或計(jì)算操作等數(shù)據(jù)流較大的任務(wù)。
為了進(jìn)一步提高了目標(biāo)異步處理函數(shù)的處理性能,無需在目標(biāo)異步處理函數(shù)中返回執(zhí)行結(jié)果,而需要利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果至調(diào)用端。
具體地,將第二標(biāo)識符及所述執(zhí)行結(jié)果序列化為一個(gè)網(wǎng)絡(luò)消息;具體是調(diào)用buildrpcmessagefrom方法將執(zhí)行結(jié)果的結(jié)果集及第二標(biāo)識符列化為一個(gè)網(wǎng)絡(luò)消息,并將網(wǎng)絡(luò)消息中的gid字段設(shè)置為標(biāo)識符,將網(wǎng)絡(luò)消息中的rpctype字段設(shè)置為rpc_message_response值,用于表示該網(wǎng)絡(luò)消息是一個(gè)遠(yuǎn)程響應(yīng)消息。
序列化為網(wǎng)絡(luò)消息后,將所述網(wǎng)絡(luò)消息及所述上下文環(huán)境塊設(shè)置到所述獲取函數(shù)rpccompleteasyncprocedure中的相應(yīng)參數(shù)中;利用所述獲取函數(shù)rpccompleteasyncprocedure發(fā)送所述執(zhí)行結(jié)果。這樣就無需在所述異步處理函數(shù)返回執(zhí)行結(jié)果,進(jìn)一步提高了所述異步處理函數(shù)的性能。
進(jìn)一步地,所述獲取并發(fā)送執(zhí)行結(jié)果后,為了避免資源泄漏,還包括:刪除(釋放)上下文環(huán)境塊rpcasyncprocedurecontext。
另外,若在全局字典dict中沒有查找到add遠(yuǎn)程方法對應(yīng)的目標(biāo)異步處理函數(shù),還包括:返回結(jié)果集,所述結(jié)果集中包括用于指示無查找結(jié)果的指示值,所述指示值的內(nèi)容為可以error_rpc_not_found,用于告知調(diào)用端,被調(diào)用端沒有add遠(yuǎn)程過程方法。
實(shí)施例四
本實(shí)施例還提供一種遠(yuǎn)程過程調(diào)用的計(jì)算機(jī)設(shè)備,如圖3所示,所述計(jì)算機(jī)設(shè)備包括:射頻(radiofrequency,rf)電路310、存儲器320、輸入單元330、顯示單元340、音頻電路350、wifi模塊360、處理器370、以及電源380等部件。本領(lǐng)域技術(shù)人員可以理解,圖3中示出的計(jì)算機(jī)設(shè)備結(jié)構(gòu)并不構(gòu)成對計(jì)算機(jī)設(shè)備的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
下面結(jié)合圖3對計(jì)算機(jī)設(shè)備的各個(gè)構(gòu)成部件進(jìn)行具體的介紹:
rf電路310可用于信號的接收和發(fā)送,特別地,將基站的下行信息接收后,給處理器350處理。通常,rf電路310包括但不限于至少一個(gè)放大器、收發(fā)信機(jī)、耦合器、低噪聲放大器(lownoiseamplifier,lna)、雙工器等。
存儲器320可用于存儲軟件程序以及模塊,處理器350通過運(yùn)行存儲在存儲器320的軟件程序以及模塊,從而執(zhí)行計(jì)算機(jī)設(shè)備的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲器320可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)計(jì)算機(jī)設(shè)備的使用所創(chuàng)建的數(shù)據(jù)等。此外,存儲器320可以包括高速隨機(jī)存取存儲器,還可以包括非易失性存儲器,例如至少一個(gè)磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。
輸入單元330可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與計(jì)算機(jī)設(shè)備的用戶設(shè)置以及功能控制有關(guān)的鍵信號輸入。具體地,輸入單元330可包括鍵盤331以及其他輸入設(shè)備332。鍵盤331,可收集用戶在其上的輸入操作,并根據(jù)預(yù)先設(shè)定的程式驅(qū)動(dòng)相應(yīng)的連接裝置。鍵盤331采集到輸出信息后再送給處理器350。除了鍵盤331,輸入單元330還可以包括其他輸入設(shè)備332。具體地,其他輸入設(shè)備332可以包括但不限于觸控面板、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。
顯示單元340可用于顯示由用戶輸入的信息或提供給用戶的信息以及計(jì)算機(jī)設(shè)備的各種菜單。顯示單元340可包括顯示面板341,可選的,可以采用液晶顯示器(liquidcrystaldisplay,lcd)、有機(jī)發(fā)光二極管(organiclight-emittingdiode,oled)等形式來配置顯示面板341。進(jìn)一步的,鍵盤331可覆蓋顯示面板341,當(dāng)鍵盤331檢測到在其上或附近的觸摸操作后,傳送給處理器350以確定觸摸事件的類型,隨后處理器350根據(jù)輸入事件的類型在顯示面板341上提供相應(yīng)的視覺輸出。雖然在圖3中鍵盤331與顯示面板341是作為兩個(gè)獨(dú)立的部件來實(shí)現(xiàn)計(jì)算機(jī)設(shè)備的輸入和輸入功能,但是在某些實(shí)施例中,可以將鍵盤331與顯示面板341集成而實(shí)現(xiàn)計(jì)算機(jī)設(shè)備的輸入和輸出功能。
音頻電路350、揚(yáng)聲器351,傳聲器352可提供用戶與計(jì)算機(jī)設(shè)備之間的音頻接口。音頻電路350可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P(yáng)聲器351,由揚(yáng)聲器351轉(zhuǎn)換為聲音信號輸出;
wifi屬于短距離無線傳輸技術(shù),計(jì)算機(jī)設(shè)備通過wifi模塊360可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖3示出了wifi模塊360,但是可以理解的是,其并不屬于計(jì)算機(jī)設(shè)備的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。
處理器370是計(jì)算機(jī)設(shè)備的控制中心,利用各種接口和線路連接整個(gè)計(jì)算機(jī)設(shè)備的各個(gè)部分,通過運(yùn)行或執(zhí)行存儲在存儲器320內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器320內(nèi)的數(shù)據(jù),執(zhí)行計(jì)算機(jī)設(shè)備的各種功能和處理數(shù)據(jù),從而對計(jì)算機(jī)設(shè)備進(jìn)行整體監(jiān)控??蛇x的,處理器370可包括一個(gè)或多個(gè)處理單元;優(yōu)選的,處理器370可集成應(yīng)用處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等。
計(jì)算機(jī)設(shè)備還包括給各個(gè)部件供電的電源380(比如電源適配器),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器370邏輯相連。
本發(fā)明提供的遠(yuǎn)程過程調(diào)用的方法、裝置及計(jì)算機(jī)設(shè)備能帶來的有益效果至少是:
本發(fā)明提供一種遠(yuǎn)程過程調(diào)用的方法、裝置及計(jì)算機(jī)設(shè)備,所述方法包括:將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;接收目標(biāo)調(diào)用請求;基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);確定所述異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果;如此,可以根據(jù)目標(biāo)異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量分配相應(yīng)的子線程,以能靈活地進(jìn)行線程調(diào)度分配,避免造成多線程沖突導(dǎo)致程序崩潰,確保了工作效率;并且無需在異步處理函數(shù)中返回執(zhí)行結(jié)果,而是利用獲取函數(shù)來獲取并返回執(zhí)行結(jié)果,這樣又進(jìn)一步提高了程序的性能。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(dsp)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的網(wǎng)關(guān)、代理服務(wù)器、系統(tǒng)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計(jì)算機(jī)可讀存儲介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供;該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)以下步驟:將預(yù)先約定的遠(yuǎn)程方法的名稱及對應(yīng)的異步處理函數(shù)注冊至全局字典中;接收目標(biāo)調(diào)用請求;基于所述目標(biāo)調(diào)用請求,判斷在所述全局字典中是否能查找到所述目標(biāo)調(diào)用請求對應(yīng)的目標(biāo)異步處理函數(shù);若在所述全局字典中能查找到所述目標(biāo)異步處理函數(shù),在主線程中調(diào)用所述目標(biāo)異步處理函數(shù);確定所述異步處理函數(shù)待處理任務(wù)的數(shù)據(jù)量,根據(jù)所述待處理任務(wù)的數(shù)據(jù)量分配子線程,在所述子線程中執(zhí)行所述目標(biāo)異步處理函數(shù);利用獲取函數(shù)獲取并發(fā)送執(zhí)行結(jié)果。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。