專利名稱:一種多進(jìn)程通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式技術(shù)領(lǐng)域,具體地說(shuō),是涉及一種嵌入式系統(tǒng)中的多進(jìn)程通信方法。
背景技術(shù):
伴隨著技術(shù)的快速發(fā)展和嵌入式CPU性能的快速提高,多進(jìn)程管理及通信技術(shù)將會(huì)在嵌入式產(chǎn)業(yè)體現(xiàn)的愈來(lái)愈明顯。而如何解決多進(jìn)程管理間的同步、調(diào)度等問(wèn)題將成為制約嵌入式產(chǎn)業(yè)發(fā)展的突出問(wèn)題。比如在數(shù)字電視領(lǐng)域中,數(shù)字電視一體機(jī)的出現(xiàn),模擬電視系統(tǒng)和數(shù)字電視系統(tǒng)兩個(gè)系統(tǒng)同時(shí)并存,使得原先那種只運(yùn)行一個(gè)應(yīng)用進(jìn)程的開(kāi)發(fā)平臺(tái)受到了極大制約。技術(shù)上需要多個(gè)應(yīng)用進(jìn)程并存,在提高系統(tǒng)健壯性的同時(shí),也帶來(lái)了多個(gè)進(jìn)程之間的管理調(diào)度問(wèn)題,甚至是多進(jìn)程之間的功能函數(shù)共享等提出了迫切的需要。以嵌入式的Iinux系統(tǒng)為例,進(jìn)程通信方法有多種,如管道通信、消息隊(duì)列、socket、內(nèi)存共享等。這些通信方法各有優(yōu)缺點(diǎn),比如管道通信的優(yōu)點(diǎn)是所有的UNIX實(shí)現(xiàn)都支持,缺點(diǎn)是只能傳遞無(wú)格式字節(jié)流,另外緩沖區(qū)大小受限;共享內(nèi)存通信方式優(yōu)點(diǎn)是通信效率高,占用內(nèi)存少,缺點(diǎn)是需要自己進(jìn)行內(nèi)存保護(hù)和進(jìn)程間的同步,使用復(fù)雜等。但是,現(xiàn)有上述多種通信方法都存在有幾個(gè)共同的缺點(diǎn)(1)使用不方便每個(gè)進(jìn)程為使用這些通信方法,需要增加大量代碼,并需要為所有進(jìn)程制定共同遵守的標(biāo)準(zhǔn)和協(xié)議,這增加了代碼的復(fù)雜度和編碼的工作量,而且運(yùn)行期間會(huì)占用更多的內(nèi)存空間,降低運(yùn)行效率;O)由于進(jìn)程的代碼分屬不同的進(jìn)程空間,不同的進(jìn)程無(wú)法訪問(wèn)不屬于自己代碼空間的地址,所以,這些通信方法均無(wú)法實(shí)現(xiàn)進(jìn)程間的函數(shù)代碼共享。為了實(shí)現(xiàn)相同的功能,每個(gè)進(jìn)程都需要實(shí)現(xiàn)自己的函數(shù),這進(jìn)一步增加了代碼的復(fù)雜度和編碼的工作量;(3)多個(gè)進(jìn)程函數(shù)的調(diào)用還存在同步的問(wèn)題,也增加了使用的不便和系統(tǒng)的不穩(wěn)定。上述這些缺點(diǎn)的存在,使得現(xiàn)有多進(jìn)程通信方法難以滿足越來(lái)越多的像數(shù)字電視一體機(jī)等這種存在多個(gè)應(yīng)用進(jìn)程對(duì)進(jìn)程通信越來(lái)越高、越來(lái)越細(xì)的要求。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)存在的上述缺點(diǎn)而提供一種多進(jìn)程通信方法,以簡(jiǎn)化編程、提高進(jìn)程間通信速度、系統(tǒng)運(yùn)行效率及穩(wěn)定性。為實(shí)現(xiàn)上述技術(shù)目的,本發(fā)明采用下述技術(shù)方案來(lái)實(shí)現(xiàn)
一種多進(jìn)程通信方法,該方法包括將一個(gè)進(jìn)程設(shè)置為服務(wù)器端進(jìn)程,需要通信的進(jìn)程均設(shè)置為客戶端進(jìn)程,服務(wù)器端進(jìn)程內(nèi)創(chuàng)建服務(wù)器端消息隊(duì)列,客戶端進(jìn)程內(nèi)創(chuàng)建客戶端消息隊(duì)列,客戶端進(jìn)程與服務(wù)器端進(jìn)程通過(guò)消息隊(duì)列進(jìn)行通信,進(jìn)而通過(guò)服務(wù)器端進(jìn)程實(shí)現(xiàn)多個(gè)客戶端進(jìn)程之間的相互通信。如上所述的多進(jìn)程通信方法,所述客戶端進(jìn)程與所述服務(wù)器端進(jìn)程通信之前,客戶端進(jìn)程首先采用下述過(guò)程注冊(cè)到服務(wù)器端進(jìn)程根據(jù)包含客戶端進(jìn)程路徑在內(nèi)的客戶端進(jìn)程名稱創(chuàng)建關(guān)鍵字,根據(jù)關(guān)鍵字創(chuàng)建客戶端進(jìn)程的消息隊(duì)列,并獲得隊(duì)列ID,然后向服務(wù)器端進(jìn)程發(fā)出注冊(cè)請(qǐng)求并存至服務(wù)器端消息隊(duì)列;服務(wù)器端進(jìn)程從服務(wù)器端消息隊(duì)列讀取客戶端進(jìn)程注冊(cè)請(qǐng)求,并在服務(wù)器端進(jìn)程中不存在相同進(jìn)程名和相同隊(duì)列ID信息時(shí),將客戶端進(jìn)程的進(jìn)程名及隊(duì)列ID信息添加至服務(wù)器端進(jìn)程。如上所述的多進(jìn)程通信方法,注冊(cè)到所述服務(wù)器端進(jìn)程的客戶端進(jìn)程采用下述過(guò)程將本進(jìn)程內(nèi)的函數(shù)注冊(cè)到服務(wù)器端進(jìn)程客戶端進(jìn)程向服務(wù)器端進(jìn)程發(fā)出包含函數(shù)信息的函數(shù)注冊(cè)請(qǐng)求并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程從服務(wù)器端消息隊(duì)列讀取函數(shù)注冊(cè)請(qǐng)求,并在服務(wù)器端進(jìn)程中不存在相同函數(shù)信息的注冊(cè)函數(shù)時(shí)將請(qǐng)求注冊(cè)的函數(shù)信息添加至服務(wù)器端進(jìn)程中。如上所述的多進(jìn)程通信方法,注冊(cè)到所述服務(wù)器端進(jìn)程的第一客戶端進(jìn)程采用下述過(guò)程調(diào)用注冊(cè)到服務(wù)器端進(jìn)程的第二客戶端進(jìn)程的函數(shù)第一客戶端進(jìn)程向服務(wù)器端進(jìn)程發(fā)出包含待調(diào)用函數(shù)信息的函數(shù)調(diào)用請(qǐng)求并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程根據(jù)待調(diào)用函數(shù)信息查找所保存的函數(shù)注冊(cè)信息,在找到函數(shù)注冊(cè)信息后將其發(fā)送至該函數(shù)注冊(cè)信息所在的第二客戶端進(jìn)程的客戶端消息隊(duì)列;第二客戶端進(jìn)程從其客戶端消息隊(duì)列讀取服務(wù)器端進(jìn)程發(fā)送的函數(shù)注冊(cè)信息后運(yùn)行相應(yīng)的函數(shù),并將運(yùn)行結(jié)果返回至服務(wù)器端進(jìn)程的服務(wù)器端消息隊(duì)列;服務(wù)器端進(jìn)程再將第二客戶端進(jìn)程返回的運(yùn)行結(jié)果發(fā)送至第一客戶端進(jìn)程的客戶端消息隊(duì)列。如上所述的多進(jìn)程通信方法,所述第一客戶端進(jìn)程以讀取特定消息的方式讀取其客戶端消息隊(duì)列中所述服務(wù)器端進(jìn)程發(fā)送的函數(shù)調(diào)用運(yùn)行結(jié)果消息,并在讀取到相應(yīng)的消息時(shí)將運(yùn)行結(jié)果立即返回至第一客戶端進(jìn)程。如上所述的多進(jìn)程通信方法,若所述第一客戶端進(jìn)程在設(shè)定時(shí)間內(nèi)未讀取到所述服務(wù)器端進(jìn)程發(fā)送的函數(shù)調(diào)用運(yùn)行結(jié)果消息,則返回函數(shù)調(diào)用超時(shí)至第一客戶端進(jìn)程。如上所述的多進(jìn)程通信方法,注冊(cè)到所述服務(wù)器端進(jìn)程的第一客戶端進(jìn)程向服務(wù)器端進(jìn)程發(fā)出定時(shí)啟動(dòng)/關(guān)閉注冊(cè)到服務(wù)器端進(jìn)程的第二客戶端進(jìn)程的請(qǐng)求至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程在讀取到請(qǐng)求后啟動(dòng)定時(shí)器,并在定時(shí)時(shí)間到時(shí)啟動(dòng)/關(guān)閉第二客戶端進(jìn)程。如上所述的多進(jìn)程通信方法,注冊(cè)到所述服務(wù)器端進(jìn)程的第一客戶端進(jìn)程采用下述過(guò)程將其進(jìn)程的數(shù)據(jù)傳遞至注冊(cè)到服務(wù)器端進(jìn)程的第二客戶端進(jìn)程第一客戶端進(jìn)程將傳遞至第二客戶端進(jìn)程的數(shù)據(jù)發(fā)送至服務(wù)器端進(jìn)程并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程讀取數(shù)據(jù)并轉(zhuǎn)發(fā)至第二客戶端進(jìn)程的客戶端消息隊(duì)列;第二客戶端進(jìn)程在讀取到數(shù)據(jù)后返回?cái)?shù)據(jù)傳遞結(jié)果至服務(wù)器端進(jìn)程的服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程再將數(shù)據(jù)傳遞結(jié)果轉(zhuǎn)發(fā)至第一客戶端進(jìn)程的客戶端消息隊(duì)列。如上所述的多進(jìn)程通信方法,注冊(cè)到所述服務(wù)器端進(jìn)程的客戶端進(jìn)程采用下述過(guò)程查詢注冊(cè)到服務(wù)器端進(jìn)程的其他客戶端進(jìn)程的進(jìn)程信息客戶端進(jìn)程發(fā)送進(jìn)程信息查詢請(qǐng)求至服務(wù)器端進(jìn)程并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程讀取進(jìn)程信息查詢請(qǐng)求后在本進(jìn)程內(nèi)搜集相應(yīng)的進(jìn)程信息,并在搜集完成后將進(jìn)程信息發(fā)送至客戶端進(jìn)程的客戶端消息隊(duì)列中。如上所述的多進(jìn)程通信方法,所述服務(wù)器端進(jìn)程采用系統(tǒng)的守護(hù)進(jìn)程實(shí)現(xiàn)。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和積極效果是本發(fā)明的多進(jìn)程通信方法在消息隊(duì)列的基礎(chǔ)上,采用服務(wù)器端/客戶端模式實(shí)現(xiàn)多個(gè)進(jìn)程之間的相互通信,減少了軟件編程復(fù)雜度、降低了進(jìn)程間的耦合度,提高了程序的可重用性和移植性,提升了系統(tǒng)的穩(wěn)定性和可靠性,可完成進(jìn)程的無(wú)縫切換,實(shí)現(xiàn)進(jìn)程間快速、穩(wěn)定的調(diào)度。結(jié)合附圖閱讀本發(fā)明的具體實(shí)施方式
后,本發(fā)明的其他特點(diǎn)和優(yōu)點(diǎn)將變得更加清
林疋。
圖1是本發(fā)明多進(jìn)程通信方法一個(gè)實(shí)施例的總體架構(gòu)圖2是本發(fā)明多進(jìn)程通信方法中進(jìn)程注冊(cè)一個(gè)實(shí)施例的實(shí)現(xiàn)流程圖;圖3是本發(fā)明多進(jìn)程通信方法中函數(shù)注冊(cè)及調(diào)用一個(gè)實(shí)施例的實(shí)現(xiàn)流程圖;圖4是本發(fā)明多進(jìn)程通信方法中啟動(dòng)/關(guān)閉進(jìn)程、進(jìn)程間數(shù)據(jù)傳遞及進(jìn)程信息查詢實(shí)施例的實(shí)現(xiàn)流程圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步詳細(xì)的說(shuō)明。首先,簡(jiǎn)要說(shuō)明本發(fā)明的設(shè)計(jì)思路本發(fā)明考慮到現(xiàn)有技術(shù)中多進(jìn)程進(jìn)行通信的方法多是采用進(jìn)程與進(jìn)程之間直接通信的方式,在這種方式下,需要為每個(gè)進(jìn)程開(kāi)發(fā)程序,每個(gè)進(jìn)程單獨(dú)維護(hù)大量的程序,而這些程序可能在許多進(jìn)程中均是相同的,從而導(dǎo)致程序開(kāi)發(fā)工作量大,影響了開(kāi)發(fā)速度;另一方面,由于進(jìn)程要維護(hù)大量的程序,導(dǎo)致進(jìn)程本身工作效率低、占用內(nèi)存資源大、運(yùn)行穩(wěn)定性差,進(jìn)而引起多進(jìn)程通信也存在上述這些缺點(diǎn)。鑒于此,本發(fā)明提出了基于服務(wù)器端/客戶端模式的多進(jìn)程通信方法,該方法在消息隊(duì)列底層通信機(jī)制的基礎(chǔ)上進(jìn)行擴(kuò)展,以服務(wù)器端進(jìn)程為核心,統(tǒng)一進(jìn)程管理接口,從而降低進(jìn)程間的耦合度,提高程序的重用性和可移植性,提升系統(tǒng)的穩(wěn)定性和可靠性。請(qǐng)參考圖1所示的本發(fā)明多進(jìn)程通信方法一個(gè)實(shí)施例的總體架構(gòu)圖。在該實(shí)施例的架構(gòu)中,將一個(gè)進(jìn)程設(shè)置為服務(wù)器端進(jìn)程11,需要通信的其他進(jìn)程均設(shè)置為客戶端進(jìn)程,分別為客戶端進(jìn)程12、客戶端進(jìn)程13及客戶端進(jìn)程14,服務(wù)器端進(jìn)程11內(nèi)創(chuàng)建服務(wù)器端消息隊(duì)列,各客戶端進(jìn)程內(nèi)分別創(chuàng)建客戶端消息隊(duì)列。各客戶端進(jìn)程與服務(wù)器端進(jìn)程11通過(guò)消息隊(duì)列進(jìn)行通信,從而通過(guò)服務(wù)器端進(jìn)程11三個(gè)客戶端進(jìn)程之間的相互通信。其中,服務(wù)器端進(jìn)程11是在系統(tǒng)啟動(dòng)即可運(yùn)行、且是不具有控制臺(tái)的進(jìn)程,其啟動(dòng)時(shí)也建立了相應(yīng)的服務(wù)器端消息隊(duì)列。作為優(yōu)選實(shí)施例,服務(wù)器端進(jìn)程11選擇系統(tǒng)的守護(hù)進(jìn)程來(lái)實(shí)現(xiàn)。各客戶端進(jìn)程具體通信過(guò)程及可實(shí)現(xiàn)的功能可參考圖2至圖4及下述對(duì)相應(yīng)附圖的描述。請(qǐng)參考圖2,該圖2所示為基于圖1架構(gòu)圖的本發(fā)明多進(jìn)程通信方法中進(jìn)程注冊(cè)一個(gè)實(shí)施例的實(shí)現(xiàn)流程圖。基于圖1架構(gòu)圖的多進(jìn)程通信方法,可以實(shí)現(xiàn)客戶端進(jìn)程注冊(cè)到服務(wù)器端進(jìn)程中,而且,進(jìn)程注冊(cè)也是實(shí)現(xiàn)多進(jìn)程通信的基礎(chǔ)。如圖2所示,以客戶端進(jìn)程12注冊(cè)到服務(wù)器端進(jìn)程11為例,進(jìn)程注冊(cè)可采用下述流程來(lái)實(shí)現(xiàn)
步驟1-1 客戶端進(jìn)程12調(diào)用進(jìn)程注冊(cè)接口。該實(shí)施例將進(jìn)程間通信的各功能封裝為函數(shù),通過(guò)調(diào)用函數(shù)的形式,利用動(dòng)態(tài)庫(kù)實(shí)現(xiàn)相應(yīng)的功能。具體來(lái)說(shuō),客戶端進(jìn)程12調(diào)用進(jìn)程注冊(cè)接口后,將根據(jù)包含客戶端進(jìn)程12的路徑在內(nèi)的客戶端進(jìn)程名稱創(chuàng)建關(guān)鍵字Key,然后根據(jù)Key創(chuàng)建該進(jìn)程的客戶端消息隊(duì)列,并通過(guò)返回函數(shù)獲得該消息隊(duì)列的ID。然后,客戶端進(jìn)程12將根據(jù)Key和消息隊(duì)列ID發(fā)出注冊(cè)請(qǐng)求。在該實(shí)施例中,作為優(yōu)選實(shí)施例,客戶端進(jìn)程名稱中包含的路徑為該進(jìn)程的絕對(duì)路徑。步驟1-2 客戶端進(jìn)程12向服務(wù)器端進(jìn)程11發(fā)出注冊(cè)請(qǐng)求,該注冊(cè)請(qǐng)求將存至服務(wù)器端進(jìn)程11的服務(wù)器端消息隊(duì)列中。步驟1-3 服務(wù)器端進(jìn)程11從服務(wù)器端消息隊(duì)列中讀取客戶端進(jìn)程12的進(jìn)程注冊(cè)請(qǐng)求,然后查找其進(jìn)程信息堆棧,檢查是否存在相同進(jìn)程名和相同消息隊(duì)列ID的進(jìn)程信息。若不存在,則將客戶端進(jìn)程12的進(jìn)程名(包含進(jìn)程路徑)及其客戶端消息隊(duì)列ID添加至服務(wù)器端進(jìn)程11的進(jìn)程信息堆棧中,注冊(cè)客戶端進(jìn)程12成功。在該實(shí)施例中,進(jìn)程信息堆棧是在服務(wù)器端進(jìn)程11中開(kāi)辟出來(lái)、用來(lái)存放注冊(cè)的客戶端進(jìn)程的有關(guān)進(jìn)程信息。而且,服務(wù)器端進(jìn)程11從其服務(wù)器端消息隊(duì)列中讀取請(qǐng)求時(shí),可以采用讀取隊(duì)列中的所有消息的方式,也可以采用讀取某個(gè)特定消息的方式。步驟1-4 在客戶端進(jìn)程12成功注冊(cè)后,服務(wù)器端進(jìn)程11向客戶端進(jìn)程12返回注冊(cè)成功消息,將該消息存入至客戶端進(jìn)程12的客戶端消息隊(duì)列中?;蛘?,在步驟1-3中,若服務(wù)器端進(jìn)程11檢查到其進(jìn)程信息堆棧中已經(jīng)存在相同進(jìn)程名和相同消息隊(duì)列ID的進(jìn)程信息,則向客戶端進(jìn)程12返回注冊(cè)失敗消息,該消息同樣存入至客戶端進(jìn)程12的客戶端消息隊(duì)列中,而客戶端進(jìn)程12可通過(guò)讀取消息隊(duì)列消息而獲得是否成功注冊(cè)到服務(wù)器端進(jìn)程11。請(qǐng)參考圖3,該圖3所示為基于圖1架構(gòu)圖的本發(fā)明多進(jìn)程通信方法中函數(shù)注冊(cè)及調(diào)用一個(gè)實(shí)施例的實(shí)現(xiàn)流程圖?,F(xiàn)有多進(jìn)程通信方法由于是進(jìn)程之間直接進(jìn)行通信,無(wú)法實(shí)現(xiàn)進(jìn)程間函數(shù)的共享。而本發(fā)明借助于服務(wù)器端進(jìn)程進(jìn)行通信,可以實(shí)現(xiàn)進(jìn)程間函數(shù)的調(diào)用和共享。首先,客戶端進(jìn)程可將其所擁有的函數(shù)注冊(cè)到服務(wù)器端進(jìn)程中,這樣,其他注冊(cè)到服務(wù)器端進(jìn)程的客戶端進(jìn)程就可以調(diào)用這些函數(shù)。具體實(shí)現(xiàn)過(guò)程如下所述
步驟2-1至步驟2-3示出了注冊(cè)到服務(wù)器端進(jìn)程11的客戶端進(jìn)程12將其所擁有的函數(shù)注冊(cè)到服務(wù)器端進(jìn)程11的函數(shù)注冊(cè)過(guò)程,具體如下
步驟2-1 已注冊(cè)到服務(wù)器端進(jìn)程11的客戶端進(jìn)程12若要想在進(jìn)程間共享其進(jìn)程內(nèi)所擁有的函數(shù)時(shí),需要向服務(wù)器端進(jìn)程11發(fā)出包含函數(shù)信息的函數(shù)注冊(cè)請(qǐng)求,該請(qǐng)求存至服務(wù)器端進(jìn)程11的服務(wù)器端消息隊(duì)列中。其中,函數(shù)信息包括函數(shù)所在的客戶端進(jìn)程名稱、函數(shù)名稱、函數(shù)的參數(shù)類型、函數(shù)地址等信息。步驟2-2 服務(wù)器端進(jìn)程11從其服務(wù)器端消息隊(duì)列中讀取客戶端進(jìn)程12的函數(shù)注冊(cè)請(qǐng)求,然后查找其函數(shù)信息堆棧,檢查是否存在相同函數(shù)信息的注冊(cè)函數(shù)。若不存在,則將該函數(shù)信息添加至函數(shù)信息堆棧中,客戶端進(jìn)程12函數(shù)注冊(cè)成功。在該實(shí)施例中,函數(shù)信息堆棧是在服務(wù)器端進(jìn)程11中開(kāi)辟出來(lái)、用來(lái)存放注冊(cè)的客戶端進(jìn)程的函數(shù)的有關(guān)fn息ο步驟2-3 在客戶端進(jìn)程12成功注冊(cè)其函數(shù)后,服務(wù)器端進(jìn)程11向客戶端進(jìn)程12返回函數(shù)注冊(cè)成功消息,將該消息存入至客戶端進(jìn)程12的客戶端消息隊(duì)列中?;蛘?,在步驟2-2中,若服務(wù)器端進(jìn)程11檢查到其函數(shù)信息堆棧中已經(jīng)存在相同函數(shù)信息的注冊(cè)函數(shù),則向客戶端進(jìn)程12返回注冊(cè)錯(cuò)誤消息,該消息同樣存入至客戶端進(jìn)程12的客戶端消息隊(duì)列中,而客戶端進(jìn)程12可通過(guò)讀取消息隊(duì)列消息而獲得是否成功將其要共享的函數(shù)注冊(cè)到服務(wù)器端進(jìn)程11。在該實(shí)施例中,客戶端進(jìn)程12將其函數(shù)注冊(cè)到服務(wù)器端進(jìn)程11之后,注冊(cè)到服務(wù)器端進(jìn)程11的另外的客戶端進(jìn)程13可以調(diào)用相應(yīng)的函數(shù),實(shí)現(xiàn)進(jìn)程間函數(shù)的共享,具體實(shí)現(xiàn)過(guò)程如下
步驟3-1 客戶端進(jìn)程13向服務(wù)器端進(jìn)程11發(fā)出包含待調(diào)用函數(shù)信息的函數(shù)調(diào)用請(qǐng)求,該調(diào)用請(qǐng)求存入服務(wù)器端進(jìn)程11的服務(wù)器端消息隊(duì)列中。例如,待調(diào)用函數(shù)信息為客戶端進(jìn)程12已經(jīng)注冊(cè)的函數(shù)信息。步驟3-2 服務(wù)器端進(jìn)程11根據(jù)待調(diào)用函數(shù)信息查找其函數(shù)信息堆棧中所保存的函數(shù)注冊(cè)信息。若找到函數(shù)注冊(cè)信息,例如,找到客戶端進(jìn)程12的函數(shù)注冊(cè)信息,執(zhí)行步驟3-3 ;若未找到函數(shù)注冊(cè)信息,則執(zhí)行步驟3-6。步驟3-3 服務(wù)器端進(jìn)程11將找到的函數(shù)信息發(fā)送至客戶端進(jìn)程12所在的客戶端消息隊(duì)列。步驟3-4 客戶端進(jìn)程12從其客戶端消息隊(duì)列中讀取到服務(wù)器端進(jìn)程11發(fā)送的函數(shù)注冊(cè)信息,將到其代碼空間中運(yùn)行相應(yīng)的函數(shù),獲得函數(shù)運(yùn)行結(jié)果。步驟3-5 客戶端進(jìn)程12將函數(shù)運(yùn)行結(jié)果返回至服務(wù)器端進(jìn)程11的服務(wù)器端消息隊(duì)列。步驟3-6 服務(wù)器端進(jìn)程11將客戶端進(jìn)程12返回的函數(shù)運(yùn)行結(jié)果發(fā)送至客戶端進(jìn)程13的客戶端消息隊(duì)列,或者在步驟3-2未找到函數(shù)注冊(cè)信息時(shí),返回調(diào)用錯(cuò)誤信息至客戶端進(jìn)程13的客戶端消息隊(duì)列。在該實(shí)施例中,客戶端進(jìn)程13可以采用讀取隊(duì)列中所有消息的方式或采用讀取某個(gè)特定消息的方式來(lái)讀取其客戶端消息隊(duì)列中的函數(shù)調(diào)用結(jié)果消息。作為優(yōu)選實(shí)施例,為實(shí)現(xiàn)函數(shù)調(diào)用的快速反饋,采用讀取某個(gè)特定消息的方式讀取其客戶端消息隊(duì)列中服務(wù)器端進(jìn)程11發(fā)送的函數(shù)調(diào)用運(yùn)行結(jié)果消息。而且,為實(shí)現(xiàn)阻塞返回,防止因其他進(jìn)程函數(shù)運(yùn)行錯(cuò)誤而影響本進(jìn)程的事務(wù)處理,該實(shí)施例還在客戶端進(jìn)程13從其客戶端消息隊(duì)列中讀取到相應(yīng)的消息時(shí)將相應(yīng)的運(yùn)行結(jié)果立即返回客戶端進(jìn)程13的返回方式。并且,若客戶端進(jìn)程13在設(shè)定時(shí)間內(nèi)未讀取到服務(wù)器端進(jìn)程11發(fā)送的函數(shù)調(diào)用運(yùn)行結(jié)果消息,則返回函數(shù)調(diào)用超時(shí)的結(jié)果至客戶端進(jìn)程13中。此外,不同客戶端進(jìn)程通過(guò)服務(wù)器端進(jìn)程11,還可以實(shí)現(xiàn)啟動(dòng)/關(guān)閉進(jìn)程、進(jìn)程間數(shù)據(jù)傳遞以及進(jìn)程信息查詢等功能,具體請(qǐng)參考圖4示出的本發(fā)明多進(jìn)程通信方法中啟動(dòng)/關(guān)閉進(jìn)程、進(jìn)程間數(shù)據(jù)傳遞及進(jìn)程信息查詢實(shí)施例的實(shí)現(xiàn)流程圖。該實(shí)施例仍以注冊(cè)到服務(wù)器端進(jìn)程11的客戶端進(jìn)程12和客戶端進(jìn)程13為例進(jìn)行介紹??蛻舳诉M(jìn)程12可以通過(guò)下述步驟4-1至步驟4-4來(lái)定時(shí)啟動(dòng)或關(guān)閉客戶端進(jìn)程13。步驟4-1 客戶端進(jìn)程12向服務(wù)器端進(jìn)程11發(fā)出定時(shí)啟動(dòng)/關(guān)閉客戶端進(jìn)程13的請(qǐng)求至服務(wù)器端消息隊(duì)列中。步驟4-2 服務(wù)器端進(jìn)程11在從其服務(wù)器端消息隊(duì)列中讀取到相應(yīng)的請(qǐng)求后啟動(dòng)定時(shí)器。步驟4-3 定時(shí)器定時(shí)時(shí)間到后,通知服務(wù)器端進(jìn)程11。步驟4-4 在定時(shí)時(shí)間到后,服務(wù)器端進(jìn)程11啟動(dòng)/關(guān)閉客戶端進(jìn)程13。客戶端進(jìn)程12可以通過(guò)下述步驟5-1至步驟5-4將其數(shù)據(jù)傳遞至客戶端進(jìn)程13中,實(shí)現(xiàn)進(jìn)程間的數(shù)據(jù)傳遞。步驟5-1 客戶端進(jìn)程12將要傳遞至客戶端進(jìn)程13的數(shù)據(jù)發(fā)送至服務(wù)器端進(jìn)程11并存至服務(wù)器端消息隊(duì)列中。步驟5-2 服務(wù)器端進(jìn)程11從其消息隊(duì)列中讀取數(shù)據(jù)并轉(zhuǎn)發(fā)至客戶端進(jìn)程13的客戶端消息隊(duì)列中。步驟5-3 客戶端進(jìn)程13在讀取到數(shù)據(jù)后返回?cái)?shù)據(jù)傳遞結(jié)果至服務(wù)器端進(jìn)程11的服務(wù)器端消息隊(duì)列。步驟5-4 服務(wù)器端進(jìn)程11將數(shù)據(jù)傳遞結(jié)果轉(zhuǎn)發(fā)至客戶端進(jìn)程12的客戶端消息隊(duì)列中。上述數(shù)據(jù)傳遞過(guò)程是以客戶端進(jìn)程12主動(dòng)進(jìn)行傳遞開(kāi)始的,當(dāng)然,并不局限于此,也可以是客戶端進(jìn)程13先向服務(wù)器端進(jìn)程11發(fā)出獲取客戶端進(jìn)程12的數(shù)據(jù)的請(qǐng)求,服務(wù)器端進(jìn)程11將請(qǐng)求轉(zhuǎn)發(fā)至客戶端進(jìn)程12,然后,再執(zhí)行上述的數(shù)據(jù)傳遞過(guò)程。此外,客戶端進(jìn)程12還可以通過(guò)下述步驟6-1至步驟6-3查詢其他注冊(cè)到服務(wù)器端進(jìn)程11的客戶端進(jìn)程1進(jìn)程信息,實(shí)現(xiàn)進(jìn)程間的進(jìn)程信息查詢,具體如下
步驟6-1 客戶端進(jìn)程12發(fā)送進(jìn)程信息查詢請(qǐng)求至服務(wù)器端進(jìn)程11,并將請(qǐng)求存至服務(wù)器端消息隊(duì)列。步驟6-2 服務(wù)器端進(jìn)程11從其服務(wù)器端消息隊(duì)列中讀取進(jìn)程信息查詢請(qǐng)求,在本進(jìn)程內(nèi)搜集相應(yīng)的進(jìn)程信息,并在搜集完成后將進(jìn)程信息發(fā)送至客戶端進(jìn)程12的客戶端消息隊(duì)列中。客戶端進(jìn)程12可以通過(guò)讀取其客戶端消息隊(duì)列而獲得所需要的其他進(jìn)程的信息。由于要進(jìn)行通信的客戶端進(jìn)程首先要注冊(cè)到服務(wù)器端進(jìn)程11上,所以,服務(wù)器端進(jìn)程11能獲知并存儲(chǔ)客戶端進(jìn)程的進(jìn)程信息,因此,在其他客戶端進(jìn)程存在進(jìn)程信息查詢請(qǐng)求后,服務(wù)器端進(jìn)程11可直接在本進(jìn)程內(nèi)查找相關(guān)的進(jìn)程信息。以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其進(jìn)行限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),依然可以對(duì)前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明所要求保護(hù)的技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種多進(jìn)程通信方法,其特征在于,將一個(gè)進(jìn)程設(shè)置為服務(wù)器端進(jìn)程,需要通信的進(jìn)程均設(shè)置為客戶端進(jìn)程,服務(wù)器端進(jìn)程內(nèi)創(chuàng)建服務(wù)器端消息隊(duì)列,客戶端進(jìn)程內(nèi)創(chuàng)建客戶端消息隊(duì)列,客戶端進(jìn)程與服務(wù)器端進(jìn)程通過(guò)消息隊(duì)列進(jìn)行通信,進(jìn)而通過(guò)服務(wù)器端進(jìn)程實(shí)現(xiàn)多個(gè)客戶端進(jìn)程之間的相互通信。
2.根據(jù)權(quán)利要求1所述的多進(jìn)程通信方法,其特征在于,所述客戶端進(jìn)程與所述服務(wù)器端進(jìn)程通信之前,客戶端進(jìn)程首先采用下述過(guò)程注冊(cè)到服務(wù)器端進(jìn)程根據(jù)包含客戶端進(jìn)程路徑在內(nèi)的客戶端進(jìn)程名稱創(chuàng)建關(guān)鍵字,根據(jù)關(guān)鍵字創(chuàng)建客戶端進(jìn)程的消息隊(duì)列,并獲得隊(duì)列ID,然后向服務(wù)器端進(jìn)程發(fā)出注冊(cè)請(qǐng)求并存至服務(wù)器端消息隊(duì)列;服務(wù)器端進(jìn)程從服務(wù)器端消息隊(duì)列讀取客戶端進(jìn)程注冊(cè)請(qǐng)求,并在服務(wù)器端進(jìn)程中不存在相同進(jìn)程名和相同隊(duì)列ID信息時(shí),將客戶端進(jìn)程的進(jìn)程名及隊(duì)列ID信息添加至服務(wù)器端進(jìn)程。
3.根據(jù)權(quán)利要求2所述的多進(jìn)程通信方法,其特征在于,注冊(cè)到所述服務(wù)器端進(jìn)程的客戶端進(jìn)程采用下述過(guò)程將本進(jìn)程內(nèi)的函數(shù)注冊(cè)到服務(wù)器端進(jìn)程客戶端進(jìn)程向服務(wù)器端進(jìn)程發(fā)出包含函數(shù)信息的函數(shù)注冊(cè)請(qǐng)求并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程從服務(wù)器端消息隊(duì)列讀取函數(shù)注冊(cè)請(qǐng)求,并在服務(wù)器端進(jìn)程中不存在相同函數(shù)信息的注冊(cè)函數(shù)時(shí)將請(qǐng)求注冊(cè)的函數(shù)信息添加至服務(wù)器端進(jìn)程中。
4.根據(jù)權(quán)利要求3所述的多進(jìn)程通信方法,其特征在于,注冊(cè)到所述服務(wù)器端進(jìn)程的第一客戶端進(jìn)程采用下述過(guò)程調(diào)用注冊(cè)到服務(wù)器端進(jìn)程的第二客戶端進(jìn)程的函數(shù)第一客戶端進(jìn)程向服務(wù)器端進(jìn)程發(fā)出包含待調(diào)用函數(shù)信息的函數(shù)調(diào)用請(qǐng)求并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程根據(jù)待調(diào)用函數(shù)信息查找所保存的函數(shù)注冊(cè)信息,在找到函數(shù)注冊(cè)信息后將其發(fā)送至該函數(shù)注冊(cè)信息所在的第二客戶端進(jìn)程的客戶端消息隊(duì)列;第二客戶端進(jìn)程從其客戶端消息隊(duì)列讀取服務(wù)器端進(jìn)程發(fā)送的函數(shù)注冊(cè)信息后運(yùn)行相應(yīng)的函數(shù),并將運(yùn)行結(jié)果返回至服務(wù)器端進(jìn)程的服務(wù)器端消息隊(duì)列;服務(wù)器端進(jìn)程再將第二客戶端進(jìn)程返回的運(yùn)行結(jié)果發(fā)送至第一客戶端進(jìn)程的客戶端消息隊(duì)列。
5.根據(jù)權(quán)利要求4所述的多進(jìn)程通信方法,其特征在于,所述第一客戶端進(jìn)程以讀取特定消息的方式讀取其客戶端消息隊(duì)列中所述服務(wù)器端進(jìn)程發(fā)送的函數(shù)調(diào)用運(yùn)行結(jié)果消息,并在讀取到相應(yīng)的消息時(shí)將運(yùn)行結(jié)果立即返回至第一客戶端進(jìn)程。
6.根據(jù)權(quán)利要求5所述的多進(jìn)程通信方法,其特征在于,若所述第一客戶端進(jìn)程在設(shè)定時(shí)間內(nèi)未讀取到所述服務(wù)器端進(jìn)程發(fā)送的函數(shù)調(diào)用運(yùn)行結(jié)果消息,則返回函數(shù)調(diào)用超時(shí)至第一客戶端進(jìn)程。
7.根據(jù)權(quán)利要求2所述的多進(jìn)程通信方法,其特征在于,注冊(cè)到所述服務(wù)器端進(jìn)程的第一客戶端進(jìn)程向服務(wù)器端進(jìn)程發(fā)出定時(shí)啟動(dòng)/關(guān)閉注冊(cè)到服務(wù)器端進(jìn)程的第二客戶端進(jìn)程的請(qǐng)求至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程在讀取到請(qǐng)求后啟動(dòng)定時(shí)器,并在定時(shí)時(shí)間到時(shí)啟動(dòng)/關(guān)閉第二客戶端進(jìn)程。
8.根據(jù)權(quán)利要求2所述的多進(jìn)程通信方法,其特征在于,注冊(cè)到所述服務(wù)器端進(jìn)程的第一客戶端進(jìn)程采用下述過(guò)程將其進(jìn)程的數(shù)據(jù)傳遞至注冊(cè)到服務(wù)器端進(jìn)程的第二客戶端進(jìn)程第一客戶端進(jìn)程將傳遞至第二客戶端進(jìn)程的數(shù)據(jù)發(fā)送至服務(wù)器端進(jìn)程并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程讀取數(shù)據(jù)并轉(zhuǎn)發(fā)至第二客戶端進(jìn)程的客戶端消息隊(duì)列;第二客戶端進(jìn)程在讀取到數(shù)據(jù)后返回?cái)?shù)據(jù)傳遞結(jié)果至服務(wù)器端進(jìn)程的服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程再將數(shù)據(jù)傳遞結(jié)果轉(zhuǎn)發(fā)至第一客戶端進(jìn)程的客戶端消息隊(duì)列。
9.根據(jù)權(quán)利要求2所述的多進(jìn)程通信方法,其特征在于,注冊(cè)到所述服務(wù)器端進(jìn)程的客戶端進(jìn)程采用下述過(guò)程查詢注冊(cè)到服務(wù)器端進(jìn)程的其他客戶端進(jìn)程的進(jìn)程信息客戶端進(jìn)程發(fā)送進(jìn)程信息查詢請(qǐng)求至服務(wù)器端進(jìn)程并存至服務(wù)器端消息隊(duì)列,服務(wù)器端進(jìn)程讀取進(jìn)程信息查詢請(qǐng)求后在本進(jìn)程內(nèi)搜集相應(yīng)的進(jìn)程信息,并在搜集完成后將進(jìn)程信息發(fā)送至客戶端進(jìn)程的客戶端消息隊(duì)列中。
10.根據(jù)權(quán)利要求1至9中任一項(xiàng)所述的多進(jìn)程通信方法,其特征在于,所述服務(wù)器端進(jìn)程為系統(tǒng)的守護(hù)進(jìn)程。
全文摘要
本發(fā)明公開(kāi)了一種多進(jìn)程通信方法,該方法將一個(gè)進(jìn)程設(shè)置為服務(wù)器端進(jìn)程,需要通信的進(jìn)程均設(shè)置為客戶端進(jìn)程,服務(wù)器端進(jìn)程內(nèi)創(chuàng)建服務(wù)器端消息隊(duì)列,客戶端進(jìn)程內(nèi)創(chuàng)建客戶端消息隊(duì)列,客戶端進(jìn)程與服務(wù)器端進(jìn)程通過(guò)消息隊(duì)列進(jìn)行通信,進(jìn)而通過(guò)服務(wù)器端進(jìn)程實(shí)現(xiàn)多個(gè)客戶端進(jìn)程之間的相互通信。利用本發(fā)明所述的通信方法進(jìn)行多進(jìn)程通信,可以簡(jiǎn)化進(jìn)程編程、提高進(jìn)程間通信速度、系統(tǒng)運(yùn)行效率及穩(wěn)定性。
文檔編號(hào)G06F9/54GK102591726SQ201110457848
公開(kāi)日2012年7月18日 申請(qǐng)日期2011年12月31日 優(yōu)先權(quán)日2011年12月31日
發(fā)明者劉慶彬, 周印偉 申請(qǐng)人:青島海信寬帶多媒體技術(shù)有限公司