專利名稱:跨進(jìn)程通信的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通訊技術(shù)領(lǐng)域,特別涉及一種跨進(jìn)程通信的方法和裝置。
背景技術(shù):
跨進(jìn)程通信即是指在不同進(jìn)程之間傳播或交換信息,在QQ等程序中,可能會應(yīng)用到Flash服務(wù)或IE服務(wù),則需要啟動QQ主進(jìn)程與Flash進(jìn)程或IE進(jìn)程之間的跨進(jìn)程通信, 現(xiàn)有技術(shù)中處理這種跨進(jìn)程通信的方式是采用建立QQ主進(jìn)程和Flash進(jìn)程之間的共享內(nèi)存,并通過讀取共享內(nèi)存進(jìn)行通信。在對現(xiàn)有技術(shù)進(jìn)行分析后,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少具有如下缺點(diǎn)在現(xiàn)有技術(shù)中,每發(fā)起一個跨進(jìn)程通信,都需創(chuàng)建該進(jìn)程和目的進(jìn)程之間的共享內(nèi)存作為通信通道,每個目的進(jìn)程需要分別加載服務(wù)模塊,嚴(yán)重浪費(fèi)內(nèi)存的空間。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了一種跨進(jìn)程通信的方法和裝置。所述技術(shù)方案如下一種跨進(jìn)程通信的方法,包括接收第一進(jìn)程發(fā)起的跨進(jìn)程通信請求;根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道;加載與所述跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊,使得加載了所述服務(wù)模塊的預(yù)設(shè)容器進(jìn)程通過所述通信通道與所述第一進(jìn)程進(jìn)行跨進(jìn)程通信。根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道,之前包括檢測與所述第一進(jìn)程之間是否存在通信通道,如果是,則復(fù)用所述通信通道,如果否,則所述預(yù)設(shè)容器進(jìn)程根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道。根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道,具體包括從所述跨進(jìn)程通信請求中提取跨進(jìn)程通信指定的模型;調(diào)用預(yù)設(shè)容器進(jìn)程中所述指定的模型,創(chuàng)建所述第一進(jìn)程與所述預(yù)設(shè)容器進(jìn)程之間的通信通道。所述預(yù)設(shè)容器進(jìn)程包括系統(tǒng)模型、進(jìn)程模型、會話模型和共享模型。一種跨進(jìn)程通信的裝置,包括接收模塊,用于接收第一進(jìn)程發(fā)起的跨進(jìn)程通信請求;通道建立模塊,用于根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道;加載模塊,用于加載與所述跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊,使得加載了所述服務(wù)模塊的預(yù)設(shè)容器進(jìn)程通過所述通信通道與所述第一進(jìn)程進(jìn)行跨進(jìn)程通信。所述裝置還包括檢測模塊,用于檢測與所述第一進(jìn)程之間是否存在通信通道,如果是,則復(fù)用所述通信通道,如果否,則觸發(fā)所述通道建立模塊根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道。所述通道建立模塊包括提取單元,用于從所述跨進(jìn)程通信請求中提取跨進(jìn)程通信指定的模型;調(diào)用單元,用于調(diào)用所述預(yù)設(shè)容器進(jìn)程中所述指定的模型,創(chuàng)建所述第一進(jìn)程與所述預(yù)設(shè)容器進(jìn)程之間的通信通道。所述預(yù)設(shè)容器進(jìn)程包括系統(tǒng)模型、進(jìn)程模型、會話模型和共享模型。本發(fā)明實(shí)施例提供的技術(shù)方案的有益效果是通過提供一個可以加載多個不同服務(wù)模塊的預(yù)設(shè)容器作為進(jìn)程入口,并在建立跨進(jìn)程通信通道時,只建立發(fā)起通信進(jìn)程和預(yù)設(shè)容器進(jìn)程的通信通道,再由預(yù)設(shè)容器進(jìn)程加載服務(wù)模塊,簡化了跨進(jìn)程通信過程中的通道建立過程,節(jié)約了代碼,提高了通信效率。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實(shí)施例提供的一種跨進(jìn)程通信的方法的流程圖;圖2是本發(fā)明實(shí)施例提供的一種跨進(jìn)程通信的方法的流程圖;圖3是本發(fā)明實(shí)施例提供的一種跨進(jìn)程通信的裝置的結(jié)構(gòu)圖;圖4是本發(fā)明實(shí)施例提供的一種跨進(jìn)程通信的裝置的結(jié)構(gòu)圖;圖5是本發(fā)明實(shí)施例提供的一種跨進(jìn)程通信的裝置的結(jié)構(gòu)圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。實(shí)施例1為了節(jié)約代碼,本發(fā)明實(shí)施例提供了一種跨進(jìn)程通信的方法,參見圖1,該方法包括101 接收第一進(jìn)程發(fā)起的跨進(jìn)程通信請求;102 根據(jù)該跨進(jìn)程通信請求創(chuàng)建與該第一進(jìn)程之間的通信通道;103 加載與該跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊,使得加載了該服務(wù)模塊的預(yù)設(shè)容器進(jìn)程通過該通信通道與該第一進(jìn)程進(jìn)行跨進(jìn)程通信。其中,根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道,之前包括檢測與所述第一進(jìn)程之間是否存在通信通道,如果是,則復(fù)用所述通信通道,如果否,則根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道。其中,根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道,具體包括從所述跨進(jìn)程通信請求中提取跨進(jìn)程通信指定的模型;
調(diào)用預(yù)設(shè)容器進(jìn)程中所述指定的模型,創(chuàng)建所述第一進(jìn)程與所述預(yù)設(shè)容器進(jìn)程之間的通信通道。其中,所述預(yù)設(shè)容器進(jìn)程包括系統(tǒng)模型、進(jìn)程模型、會話模型和共享模型。通過提供一個可以加載多個不同服務(wù)模塊的預(yù)設(shè)容器作為進(jìn)程入口,并在建立跨進(jìn)程通信通道時,只建立發(fā)起通信進(jìn)程和預(yù)設(shè)容器進(jìn)程的通信通道,再由預(yù)設(shè)容器進(jìn)程加載服務(wù)模塊,簡化了跨進(jìn)程通信過程中的通道建立過程,節(jié)約了代碼,提高了通信效率。實(shí)施例2為了節(jié)約代碼,本發(fā)明實(shí)施例提供的一種跨進(jìn)程通信的方法,本發(fā)明實(shí)施例僅以發(fā)起跨進(jìn)程通信的進(jìn)程為第一進(jìn)程,參見圖2,該方法包括201 第一進(jìn)程向預(yù)設(shè)容器進(jìn)程發(fā)起跨進(jìn)程通信請求,該跨進(jìn)程通信請求攜帶由第一進(jìn)程動態(tài)生成的兩個⑶ID (GlcAally Unique Identif ier,全球唯一標(biāo)識符),該兩個 GUID包括第一進(jìn)程標(biāo)識和預(yù)設(shè)容器進(jìn)程標(biāo)識,該第一進(jìn)程標(biāo)識用于標(biāo)識發(fā)起跨進(jìn)程通信的進(jìn)程,該第二進(jìn)程標(biāo)識用于標(biāo)識跨進(jìn)程通信的目的進(jìn)程即預(yù)設(shè)容器進(jìn)程;具體地,該兩個⑶ID的作用在于標(biāo)識進(jìn)程,并初始化跨進(jìn)程通信兩端的共享內(nèi)存。從第一進(jìn)程到預(yù)設(shè)容器進(jìn)程方向的通信內(nèi)存使用第二進(jìn)程標(biāo)識GUID命名,被所有的第一進(jìn)程共享,預(yù)設(shè)容器進(jìn)程一啟動這塊內(nèi)存就已經(jīng)分配好,直到預(yù)設(shè)容器進(jìn)程退出才釋放,而從預(yù)設(shè)容器進(jìn)程到第一進(jìn)程的通信內(nèi)存屬于該第一進(jìn)程私有。為保證不沖突,第一進(jìn)程則通過從第一進(jìn)程到預(yù)設(shè)容器的單向通道把這個第二進(jìn)程標(biāo)識GUID傳遞給預(yù)設(shè)容器進(jìn)程。在本發(fā)明實(shí)施例中,第一進(jìn)程可以為各種主進(jìn)程,例如QQ、IM等,而第二進(jìn)程可以為預(yù)設(shè)容器進(jìn)程。需要說明的是,該預(yù)設(shè)容器為本發(fā)明實(shí)施例提出的一種用于跨進(jìn)程通信的容器,該預(yù)設(shè)容器用于當(dāng)接收到跨進(jìn)程通信的請求時,建立從發(fā)起通信的進(jìn)程到所述容器進(jìn)程的通信通道,并根據(jù)所述請求的類型加載相應(yīng)的服務(wù)模塊。202 預(yù)設(shè)容器進(jìn)程接收跨進(jìn)程通信的請求,并提取跨進(jìn)程通信指定的模型;需要說明的是,該預(yù)設(shè)容器進(jìn)程中包括系統(tǒng)模型、進(jìn)程模型、會話模型或共享模型,而該模型即為上述四種模型中的任一種或幾種。203 判斷預(yù)設(shè)容器的狀態(tài)是否為開啟,如果是,則執(zhí)行步驟205,如果否,則執(zhí)行步驟204 ;該判斷的方法有多種,可以利用檢測服務(wù)句柄的方式或服務(wù)進(jìn)程的方式,本發(fā)明實(shí)施例不做具體限定。204:開啟預(yù)設(shè)容器;具體地,預(yù)設(shè)容器啟動后,會對第一進(jìn)程到預(yù)設(shè)容器間的通道進(jìn)行初始化,以便進(jìn)行后續(xù)的通道建立過程。205:調(diào)用預(yù)設(shè)容器進(jìn)程中該指定的模型,創(chuàng)建第一進(jìn)程與預(yù)設(shè)容器進(jìn)程之間的通信通道;本領(lǐng)域技術(shù)人員可以獲知,預(yù)設(shè)容器進(jìn)程包含多種模型,用以為不同的請求服務(wù), 但是該預(yù)設(shè)容器都有統(tǒng)一的入口和出口,為封裝好的代碼,該預(yù)設(shè)容器為系統(tǒng)提供了唯一的入口只需接收到入口的數(shù)據(jù),并根據(jù)入口的數(shù)據(jù)進(jìn)行預(yù)設(shè)的操作,從統(tǒng)一的數(shù)據(jù)出口輸出處理后的數(shù)據(jù)或操作即可。
該步驟205之前還包括檢測發(fā)起跨進(jìn)程通行的進(jìn)程與所述預(yù)設(shè)容器之間是否存在通信通道,如果是,則復(fù)用所述通信通道,如果否,則根據(jù)所述請求的類型創(chuàng)建主進(jìn)程與預(yù)設(shè)容器之間的通信通道。該步驟可以在存在通信通道時,利用已有的通道進(jìn)行通信,在加載服務(wù)模塊的時候,可在已有模塊的基礎(chǔ)上加載,也可以卸載原有服務(wù)模塊后,再加載與當(dāng)前請求相應(yīng)的服務(wù)模塊,該步驟省略了建立通道的過程,進(jìn)一步的減少代碼的浪費(fèi)。206:根據(jù)跨進(jìn)程通信請求,加載與該跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊。對于服務(wù)模塊來說,容器模型是透明的,它并不關(guān)心運(yùn)行在哪種容器模型內(nèi)。優(yōu)選地,該預(yù)設(shè)容器具體為App容器,指可以加載不同服務(wù)模塊的進(jìn)程,該進(jìn)程能和應(yīng)用程序的主進(jìn)程通信;每個容器實(shí)例可以加載一個或者多個服務(wù)模塊,可以根據(jù)用戶需要動態(tài)裝載服務(wù)模塊。服務(wù)模塊是指實(shí)現(xiàn)某些特定功能的dll,該dll按規(guī)定導(dǎo)出相應(yīng)的入口函數(shù)。進(jìn)一步地,經(jīng)過上述步驟201-206,該加載了服務(wù)模塊的預(yù)設(shè)容器進(jìn)程可以通過通信通道與第一進(jìn)程進(jìn)行跨進(jìn)程通信等,此時需要對容器的加載情況進(jìn)行檢查,也即是需要對服務(wù)模塊的加載情況進(jìn)行檢查,如果沒有,則再次加載服務(wù)模塊,并由該容器生成會話ID 等標(biāo)識,再向第一進(jìn)程發(fā)送響應(yīng),然后,執(zhí)行服務(wù)模塊導(dǎo)出函數(shù)Or^essionCreate通知新會話已經(jīng)建立。需要說明的是,在服務(wù)模塊運(yùn)行期間,第一進(jìn)程可調(diào)用等待服務(wù)進(jìn)程句柄,如果服務(wù)進(jìn)程結(jié)束,則第一進(jìn)程關(guān)閉會話,然后拋出會話異常斷開通知事件,上層應(yīng)用可以視需要決定是否重新創(chuàng)建會話。如果服務(wù)模塊有bug,每次都發(fā)生崩潰,就會使服務(wù)進(jìn)程不斷崩潰、 重啟,導(dǎo)致用戶CPU占用率100% ;影響用戶體驗(yàn),因此可以限定服務(wù)最大重啟次數(shù),該最大重啟次數(shù)優(yōu)選為3次。且服務(wù)模塊有一個單獨(dú)的數(shù)據(jù)接收線程,接收到數(shù)據(jù)后,派發(fā)到業(yè)務(wù)所在的主線程。因此如果主線程卡死,數(shù)據(jù)接收線程是可以獲知的,如果發(fā)現(xiàn)主線程卡死, 則用信號量通知第一進(jìn)程,第一進(jìn)程可關(guān)閉會話,拋出會話卡死事件,再由第一進(jìn)程視需要決定是否重新創(chuàng)建會話。在上述實(shí)施例中,該跨進(jìn)程通信具體為共享內(nèi)存通信或Socket通信。如果利用 Socket通信,會話的流式數(shù)據(jù)通信和一堆多連接關(guān)系管理用TCP表述更為自然。其中,共享內(nèi)存通信是基于信號量和共享內(nèi)存實(shí)現(xiàn)一個循環(huán)隊(duì)列已完成的數(shù)據(jù)通信,其具體內(nèi)容為現(xiàn)有技術(shù)所公開,不再贅述。本發(fā)明提供的方法,通過提供一個可以加載多個不同服務(wù)模塊的預(yù)設(shè)容器作為進(jìn)程入口,并在建立跨進(jìn)程通信通道時,只建立發(fā)起通信進(jìn)程和預(yù)設(shè)容器進(jìn)程的通信通道,再由預(yù)設(shè)容器進(jìn)程加載服務(wù)模塊,簡化了跨進(jìn)程通信過程中的通道建立過程,節(jié)約了代碼,提高了通信效率。實(shí)施例3為了節(jié)約代碼,本發(fā)明實(shí)施例提供了一種跨進(jìn)程通信的裝置,參見圖3,該裝置包括接收模塊301,用于接收第一進(jìn)程發(fā)起的跨進(jìn)程通信請求;;通道建立模塊302,用于根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道;加載模塊303,用于加載與所述跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊,使得加載了所述服務(wù)模塊的預(yù)設(shè)容器進(jìn)程通過所述通信通道與所述第一進(jìn)程進(jìn)行跨進(jìn)程通信。
參見圖4,所述裝置還包括檢測模塊304,用于檢測與所述第一進(jìn)程之間是否存在通信通道,如果是,則復(fù)用所述通信通道,如果否,則觸發(fā)所述通道建立模塊根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道。參見圖5,該通道建立模塊302包括提取單元30 ,用于從所述跨進(jìn)程通信請求中提取跨進(jìn)程通信指定的模型;開啟單元302b,用于調(diào)用所述預(yù)設(shè)容器進(jìn)程中所述指定的模型,創(chuàng)建所述第一進(jìn)程與所述預(yù)設(shè)容器進(jìn)程之間的通信通道;所述預(yù)設(shè)容器進(jìn)程包括系統(tǒng)模型、進(jìn)程模型、會話模型和共享模型。本發(fā)明實(shí)施例提供的裝置,與方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過程詳見方法實(shí)施例,這里不再贅述。本發(fā)明實(shí)施例提供的上述技術(shù)方案的全部或部分可以通過程序指令相關(guān)的硬件來完成,所述程序可以存儲在可讀取的存儲介質(zhì)中,該存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種跨進(jìn)程通信的方法,其特征在于,包括接收第一進(jìn)程發(fā)起的跨進(jìn)程通信請求;根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道;加載與所述跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊,使得加載了所述服務(wù)模塊的預(yù)設(shè)容器進(jìn)程通過所述通信通道與所述第一進(jìn)程進(jìn)行跨進(jìn)程通信。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道,之前包括檢測與所述第一進(jìn)程之間是否存在通信通道,如果是,則復(fù)用所述通信通道,如果否, 則根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道,具體包括從所述跨進(jìn)程通信請求中提取跨進(jìn)程通信指定的模型;調(diào)用預(yù)設(shè)容器進(jìn)程中所述指定的模型,創(chuàng)建所述第一進(jìn)程與所述預(yù)設(shè)容器進(jìn)程之間的通信通道。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述預(yù)設(shè)容器進(jìn)程包括系統(tǒng)模型、進(jìn)程模型、會話模型和共享模型。
5.一種跨進(jìn)程通信的裝置,其特征在于,包括接收模塊,用于接收第一進(jìn)程發(fā)起的跨進(jìn)程通信請求;通道建立模塊,用于根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道;加載模塊,用于加載與所述跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊,使得加載了所述服務(wù)模塊的預(yù)設(shè)容器進(jìn)程通過所述通信通道與所述第一進(jìn)程進(jìn)行跨進(jìn)程通信。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述裝置還包括檢測模塊,用于檢測與所述第一進(jìn)程之間是否存在通信通道,如果是,則復(fù)用所述通信通道,如果否,則觸發(fā)所述通道建立模塊根據(jù)所述跨進(jìn)程通信請求創(chuàng)建與所述第一進(jìn)程之間的通信通道。
7.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述通道建立模塊包括提取單元,用于從所述跨進(jìn)程通信請求中提取跨進(jìn)程通信指定的模型;調(diào)用單元,用于調(diào)用所述預(yù)設(shè)容器進(jìn)程中所述指定的模型,創(chuàng)建所述第一進(jìn)程與所述預(yù)設(shè)容器進(jìn)程之間的通信通道。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述預(yù)設(shè)容器進(jìn)程包括系統(tǒng)模型、進(jìn)程模型、會話模型和共享模型。
全文摘要
本發(fā)明公開了一種跨進(jìn)程通信的方法和裝置,屬于通訊技術(shù)領(lǐng)域。該方法包括預(yù)設(shè)容器進(jìn)程接收第一進(jìn)程發(fā)起的跨進(jìn)程通信請求;該預(yù)設(shè)容器進(jìn)程根據(jù)該跨進(jìn)程通信請求創(chuàng)建與該第一進(jìn)程之間的通信通道;該預(yù)設(shè)容器進(jìn)程加載與該跨進(jìn)程通信請求相應(yīng)的服務(wù)模塊,使得加載了該服務(wù)模塊的預(yù)設(shè)容器進(jìn)程通過該通信通道與該第一進(jìn)程進(jìn)行跨進(jìn)程通信。該裝置包括接收模塊、通道建立模塊和加載模塊。本發(fā)明簡化了跨進(jìn)程通信過程中的通道建立過程,節(jié)約了代碼,提高了通信效率。
文檔編號H04L12/58GK102469035SQ20101053667
公開日2012年5月23日 申請日期2010年11月5日 優(yōu)先權(quán)日2010年11月5日
發(fā)明者鄧立波, 陳祎 申請人:騰訊科技(深圳)有限公司