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