本發明專利技術公開了一種多節點數據交互的實現方法,在每個節點上設置數據服務模塊,任一節點上的數據服務模塊用于實現該節點自身進程之間的數據交互,同時不同節點上的數據服務模塊實現不同節點進程之間的數據交互;所述數據服務模塊通過遠程過程調用協議實現進程間的數據交互,所述遠程過程調用協議的底層通過Qt元對象系統實現。使用該方法可以使分布在同一個節點的多個進程或不同節點上的進程之間順暢的完成業務管理,同時也可以降低傳統數據交互方法程序實現的復雜程度。
【技術實現步驟摘要】
一種多節點數據交互的實現方法
本專利技術涉及多節點之間的業務處理,特別涉及一種節點數據交互的實現方法。
技術介紹
隨著計算機以及網絡的高速發展,分布式處理系統被大規模應用。分布式系統中某個節點為了訪問其他機器節點的數據與資源,一般會通過自定義報文格式的方式進行數據交互或業務處理。這種方式的通信效率非常低而且維護開發工作量較大。當增加或修改某個功能時有可能需要增加新的報文格式或對已有的報文格式進行修改,因此系統中模塊之間的耦合程度較高,獨立性比較差。如果機器節點之間通過過程調用的方式來訪問其他機器節點的數據與資源,就可以大大降低進程實現的復雜度,從而降低進程之間的耦合性,讓系統設計變得更加簡單。從某種意義上來講,遠程過程調用可看作是把分割的程序通過網絡進行重組的過程。通過遠程過程調用,當要訪問其他機器系統上數據的時候就不需每次拷貝整個數據庫或它的大部分程序到用戶系統,遠程機器節點只需要處理來自客戶端的處理請求,甚至只執行一些數據計算,把執行的結果再發送給調用者。當數據存放在某個機器節點時,其他機器節點可以很方便的通過遠程過程訪問其數據,因此極大提高了分布式系統中計算機資源的利用率。過程調用一般是指將控制從調用者傳遞到被調用者,被調用者在執行結束后將控制交還給調用者。目前大多數調用者和被調用者是在同一臺機器上,它們是在生成可執行程序時由編譯器鏈接起來的,這種過程調用一般稱為本地過程調用。遠程過程調用指的是由本地機器系統上的某個進程激活遠程機器系統上的另外一個進程,遠程系統調用對調用者表現為本地過程調用,但實際上是調用了遠程系統上的過程。處理遠程過程調用的進程由本地客戶端進程和其他機器節點進程共同作用。遠程過程調用對于本地客戶端表現為由調用進程在執行某個控制時首先將過程調用需要的參數以及需要調用的過程生成對應的消息,并通過網絡發往其他機器節點其他機器節點接到消息后調用相應過程,調用結束后將執行結果通過網絡發送至調用者。傳統的過程調用是由開發人員在本地編譯完成,并只能運行在本地機器上,這種結構已經無法適應分布式系統應用的實際需求。傳統過程調用沒有辦法充分利用網絡上其他機器節點的系統資源,也沒有辦法提高代碼在實體間的共享程度,使得分布式系統機器資源沒有得到充分的利用。而遠程過程調用很好地解決了傳統過程調用,通過遠程調用可以充分利用非共享內存的多處理器環境并應用分布在多臺機器節點上,應用程序就像在一個多處理器的計算機上運行一樣,可以方便的實現過程代碼共享,提高系統資源的利用率。遠程過程調用和通過定義報文傳遞處理消息相比,前者語義更加清楚、使用更加簡單、通用性以及可擴展性更強,而且有著更高的通信效率。當在系統或節點之間采用遠程過程調用(RemoteProcedureCall,RPC)之后,原先節點之間的數據及操作處理由圖1變成圖2的模式,進程在處理其他節點或進程的數據就變得和在自己本進程內處理一樣簡單,程序代碼更加簡單,減小了系統設計的復雜性。
技術實現思路
專利技術目的:針對上述現有技術,提出一種多節點數據交互的實現方法,通過遠程過程調用實現數據交互,簡化業務數據處理流程。技術方案:一種多節點數據交互的實現方法,在每個節點上設置數據服務模塊,任一節點上的數據服務模塊用于實現該節點自身進程之間的數據交互,同時不同節點上的數據服務模塊實現不同節點進程之間的數據交互;所述數據服務模塊通過遠程過程調用協議實現進程間的數據交互,所述遠程過程調用協議的底層通過Qt元對象系統實現。進一步的,所述遠程過程調用協議的底層通過Qt元對象系統實現時,Qt元對象系統中QObject子類的Slot函數所對應的輸入參數作為過程調用的輸入,Slot函數的返回值作為過程調用的輸出結果。進一步的,所述遠程過程調用中,當客戶端任一進程需要獲得其他機器節點的變化數據的時候,不同節點之間變化數據的通知包括如下步驟:首先在客戶端的數據服務模塊上對所述數據或該數據對象類型進行注冊;當其它機器節點的數據變化后,將變化數據發送給客戶端的數據服務模塊;然后由客戶端的服務模塊通過進程間過程調用通知所述注冊數據或數據對象類型所對應的進程,在所述對應進程的進程空間內執行相應的回調函數。進一步的,所述遠程過程調用包括如下具體步驟:e.機器節點按照功能分類,從QObject子類繼承得到若干個對象,節點之間的遠程過程調用通過所述若干個對象所對應的Slot函數實現,并將所述QObject子類實例化為實例對象后加入到服務對象列表;f.客戶端當進行遠程過程調用時,通過套接字將調用請求傳遞至對應的機器節點,所述客戶端在請求發送后進入阻塞狀態,等待所述對應的機器節點的返回結果;所述調用請求包括要執行的對象類名、成員函數名及參數;g.所述對應的機器節點在收到所述調用請求后,首先根據對象類名在服務對象列表中找到對應的實例對象,然后根據成員函數名通過Qt元對象系統找到對應類的Slot函數的元對象方法,再通過解析所述元對象方法的參數類型,依次將傳入的參數轉換成對應Slot函數所需的參數類型,然后通過元對象的invoke方法執行所述Slot函數,實現客戶端的請求;h.所述對應的機器節點將對應的執行結果以及函數返回結果通過套接字發送至客戶端,至此所述對應的機器節點完成了一次遠程過程調用服務請求;i.客戶端在收到所述對應的機器節點的執行結果以及函數返回結果后,首先根據所述執行結果判斷執行是否成功:如果執行成功,則提取過程調用的函數返回結果并結束阻塞狀態,至此客戶端發起的遠程過程調用執行結束;如果執行失敗,則根據執行結果錯誤代碼進行相應的處理。進一步的,客戶端設置過程調用超時時間,如果在指定的時間內所述對應的機器節點沒有響應或沒有將執行結果或函數返回結果傳遞至客戶端,過程調用自動結束并返回超時的錯誤代碼。有益效果:本專利技術的多節點數據交互的實現方法,通過遠程過程調用實現數據交互,遠程過程調用的底層采用Qt元對象系統實現。遠程過程調用中,從QObject子類定位遠程過程調用指定的Slot槽函數并執行,實現了靈活的過程調用處理。根據C++重載的特點,可以在QObject子類定義參數不同的同一個函數,這樣調用者就可以根據自己的需要選擇適合的函數,讓遠程過程調用變得更加靈活。利用本專利技術方法實現的基于Qt元對象的遠程過程調用機制,當需要添加服務內容時,只需要在QObject子類中增加相應的Slot槽函數或添加新的QObject子類實例,然后遠程過程調用客戶端在調用時指定函數名稱和函數參數即可完成調用。因此,基于Qt元對象系統的遠程過程調用服務模塊在擴展、升級與維護等方面非常簡單,同時讓系統模塊的開發更加靈活,而且可以在多個平臺上運行。附圖說明圖1是傳統方式下節點之間的數據業務處理結構圖;圖2是采用RPC實現節點之間的數據交互處理結構圖;圖3是本專利技術多節點數據交互多節點通訊示意圖;圖4是多節點數據交互的實現方法流程圖;圖5是客戶端在執行遠程過程調用時的調用形式。具體實施方式下面結合附圖對本專利技術做更進一步的解釋。如圖3所示,一種多節點數據交互的實現方法,在每個機器節點上布置數據服務模塊,任一節點上的數據服務模塊用于實現該節點自身進程之間的數據交互,不同節點上的數據服務模塊實現不同節點進程之間的數據交互。數據服務模本文檔來自技高網...

【技術保護點】
一種多節點數據交互的實現方法,其特征在于:在每個節點上設置數據服務模塊,任一節點上的數據服務模塊用于實現該節點自身進程之間的數據交互,同時不同節點上的數據服務模塊實現不同節點進程之間的數據交互;所述數據服務模塊通過遠程過程調用協議實現進程間的數據交互,所述遠程過程調用協議的底層通過Qt元對象系統實現。
【技術特征摘要】
1.一種多節點數據交互的實現方法,其特征在于:在每個節點上設置數據服務模塊,任一節點上的數據服務模塊用于實現該節點自身進程之間的數據交互,同時不同節點上的數據服務模塊實現不同節點進程之間的數據交互;所述數據服務模塊通過遠程過程調用協議實現進程間的數據交互,所述遠程過程調用協議的底層通過Qt元對象系統實現;所述遠程過程調用協議的底層通過Qt元對象系統實現時,Qt元對象系統中QObject子類的Slot函數所對應的輸入參數作為過程調用的輸入,Slot函數的返回值作為過程調用的輸出結果;所述遠程過程調用包括如下具體步驟:a.機器節點按照功能分類,從QObject子類繼承得到若干個對象,節點之間的遠程過程調用通過所述若干個對象所對應的Slot函數實現,并將所述QObject子類實例化為實例對象后加入到服務對象列表;b.客戶端當進行遠程過程調用時,通過套接字將調用請求傳遞至對應的機器節點,所述客戶端在請求發送后進入阻塞狀態,等待所述對應的機器節點的返回結果;所述調用請求包括要執行的對象類名、成員函數名及參數;c.所述對應的機器節點在收到所述調用請求后,首先根據對象類名在服務對象列表中找到對應的實例對象,然后根據成員函數名通過Qt元對象系統找到對應類的Slot函數的元對象方法,再通過解析所述元對象方法的參數類型,依次將傳入的參數轉換成...
【專利技術屬性】
技術研發人員:朱偉,高明,
申請(專利權)人:江蘇大燁智能電氣股份有限公司,
類型:發明
國別省市:江蘇;32
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。