專利名稱:一種實現(xiàn)多進程共享端口接收網(wǎng)絡(luò)通知的系統(tǒng)及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計算機進程接收網(wǎng)絡(luò)通知的系統(tǒng)及其方法,特別是 一種在同一計算機中的不同進程通過共享網(wǎng)絡(luò)端口接收網(wǎng)絡(luò)通知消息的 通訊系統(tǒng)和通訊方法,屬于計算機網(wǎng)絡(luò)通訊技術(shù)領(lǐng)域。
背景技術(shù):
在一個網(wǎng)絡(luò)應(yīng)用系統(tǒng)中,通常都需要多個工作站或網(wǎng)絡(luò)應(yīng)用模塊協(xié) 同工作完成某個事務(wù)。在一個模塊完成某項工作以后,通常要發(fā)送消息 給其它的模塊,將工作狀態(tài)通知給其它模塊。如果應(yīng)用模塊不在同一臺 計算機上,則需要通過網(wǎng)絡(luò)來傳送這些通知消息。在大多數(shù)情況下,大
家都是基于TCP/IP協(xié)議,來設(shè)計和實現(xiàn)這些通知消息的通訊。
在TCP/IP協(xié)議中,某個應(yīng)用程序往往僅通過某個特定的網(wǎng)絡(luò)端口 進行網(wǎng)絡(luò)通訊,即該網(wǎng)絡(luò)端口的接收到的所有網(wǎng)絡(luò)數(shù)據(jù)包都將由操作系 統(tǒng)轉(zhuǎn)至所對應(yīng)的應(yīng)用程序進行處理,同時其他應(yīng)用程序無法使用該網(wǎng)絡(luò) 端□。
然而,在一些網(wǎng)絡(luò)應(yīng)用中,會出現(xiàn)同一臺計算機上同時運行的多應(yīng) 用程序進程需要接收同樣的通知消息的情況。如前所述,通常情況下一 個進程打開的網(wǎng)絡(luò)端口以后,其它程序?qū)o法使用此端口,因而就產(chǎn)生 了網(wǎng)絡(luò)端口沖突的情況。為解決避免網(wǎng)絡(luò)端口沖突,如圖1所示,通常 的解決方法是為每個進程分別分配一個網(wǎng)絡(luò)端口,由發(fā)送方分別向各個 端口發(fā)送數(shù)據(jù)。顯然,通過這種通訊方法同一網(wǎng)絡(luò)通知可能需要占用大 量網(wǎng)絡(luò)帶寬和計算機網(wǎng)絡(luò)端口,很容易造成網(wǎng)絡(luò)資源和計算機系統(tǒng)資源 的浪費。
發(fā)明內(nèi)容
本發(fā)明的發(fā)明目的在于解決現(xiàn)有技術(shù)中的問題,提供了一種對同一 計算機中的不同進程共享同一網(wǎng)絡(luò)端口接收網(wǎng)絡(luò)通知消息的系統(tǒng)及其方
法,從而不需要為每個進程設(shè)置獨立的接收端口,降低了同一網(wǎng)絡(luò)通知 重復(fù)傳遞造成的資源浪費。
本發(fā)明的發(fā)明目的是通過下述技術(shù)方案予以實現(xiàn)的一種實現(xiàn)多進程共享端口接收網(wǎng)絡(luò)通知的系統(tǒng),包括發(fā)送端和接收 端,特征正在于所述接收端包括共享端口、監(jiān)聽進程、消息隊列和若 干用戶進程;所述共享端口在監(jiān)聽進程的控制下,從網(wǎng)絡(luò)中接收發(fā)送來 的網(wǎng)絡(luò)通知;所述監(jiān)聽進程將所接收的網(wǎng)絡(luò)通知保存在所述消息隊列中; 所述各個用戶進程與該消息隊列相連,復(fù)制消息隊列中的網(wǎng)絡(luò)通知。
所述消息隊列為循環(huán)隊列。
一種實現(xiàn)多進程共享端口接收網(wǎng)絡(luò)通知的方法,基于所述權(quán)利要求 l的通訊系統(tǒng)實現(xiàn),其特征在于
1) 當啟動一個用戶進程時,首先檢測接收端是否已有可用的監(jiān) 聽進程;
2) 如果有可用的監(jiān)聽進程,則該用戶進程與該監(jiān)聽進程相對應(yīng) 消息隊列相聯(lián)系;如果沒有可用的監(jiān)聽進程,則根據(jù)需要自動啟動監(jiān) 聽進程,并建立相應(yīng)的消息隊列;
3) 監(jiān)聽進程打開指定的共享端口 ,通過TCP/IP協(xié)議接收發(fā)送端 發(fā)出的網(wǎng)絡(luò)通知;
4 )監(jiān)聽進程將共享端口接收到的網(wǎng)絡(luò)通知存放到所述消息隊列
中;
5) 用戶進程不斷對消息隊列進行輪詢,以獲取新的網(wǎng)絡(luò)通知并 進行處理;
6) 當所有的用戶進程退出時,監(jiān)聽進程自動關(guān)閉。 所述步驟3、 4包括如下具體步驟
31) 監(jiān)聽進程打開指定的共享端口;
32) 監(jiān)聽進程檢查該共享端口是否收到網(wǎng)絡(luò)通知消息包;
33) 如果接收到網(wǎng)絡(luò)通知消息包,則將該消息包打上時間,然后存 放到消息隊列中;如果沒有接收到網(wǎng)絡(luò)通知消息包,則執(zhí)行步驟34;
34) 監(jiān)聽進程檢査是否仍有用戶進程在運行,如果所有用戶進程都 己退出,則退出程序;否則執(zhí)行步驟32。
所述步驟5包括如下具體步驟
51) 用戶進程啟動與消息隊列之間的消息接收線程;
52) 消息接收線程通過輪詢從消息隊列査找是否有未接收的網(wǎng)絡(luò) 通知;
53) 如果找到未接收的網(wǎng)絡(luò)通知,則用戶進程復(fù)制該網(wǎng)絡(luò)通知并進行步驟54;如果沒找到未接收的網(wǎng)絡(luò)通知,返回步驟52;
54) 用戶進程檢查所復(fù)制網(wǎng)絡(luò)通知是否為本發(fā)送給該用戶進程的 網(wǎng)絡(luò)通知,如果是則執(zhí)行相應(yīng)操作并返回步驟52;如果不是則丟棄該 網(wǎng)絡(luò)通知并返回步驟52;
55) 當用戶進程結(jié)束時,結(jié)束接收線程。
本發(fā)明的有益效果是本發(fā)明通過提供了一種對同一計算機中的不 同進程共享同一網(wǎng)絡(luò)端口接收網(wǎng)絡(luò)通知消息的系統(tǒng)及其方法,從而不需
要為每個進程設(shè)置獨立的接收端口 ,降低了同一網(wǎng)絡(luò)通知重復(fù)傳遞造成
的資源浪費。
圖1為現(xiàn)有技術(shù)對接收端多進程的網(wǎng)絡(luò)端口分配結(jié)構(gòu)示意圖; 圖2為多進程共享端口接收網(wǎng)絡(luò)通知系統(tǒng)的結(jié)構(gòu)示意圖; 圖3為多進程共享端口接收網(wǎng)絡(luò)通知的方法流程圖; 圖4為本發(fā)明第一實施例系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式
下面結(jié)合附圖和實施例對本發(fā)明作進一步描述。
本發(fā)明針對前述現(xiàn)有技術(shù)中存在的對同一網(wǎng)絡(luò)通知重復(fù)發(fā)送,占 用大量網(wǎng)絡(luò)帶寬和系統(tǒng)資源的問題。對通訊系統(tǒng)中的接收端做了 一定 改進,對同一計算機上經(jīng)常需要接收相同網(wǎng)絡(luò)通知的進程分配一個統(tǒng) 一的共享端口接收網(wǎng)絡(luò)通知,以減輕因資源復(fù)用而帶來的壓力。
如圖2所示,本發(fā)明的多進程共享端口接收網(wǎng)絡(luò)通知的系統(tǒng)包括發(fā) 送端和接收端。由于發(fā)送端與現(xiàn)有技術(shù)并無區(qū)別,在此就不再詳細敘述。 該接收端中包括一個指定的共享端口、 一個監(jiān)聽進程、 一個消息隊列和 若干程序進程。該共享端口在監(jiān)聽進程的控制下,從網(wǎng)絡(luò)中接收發(fā)送至 本地的網(wǎng)絡(luò)通知。當共享端口接收到網(wǎng)絡(luò)通知后,由監(jiān)聽進程將該網(wǎng)絡(luò) 通知保存在消息隊列中。各個程序進程與該消息隊列相連,對消息隊列 進行輪詢,當發(fā)現(xiàn)隊列中有未接收過的網(wǎng)絡(luò)通知時,即將該網(wǎng)絡(luò)通知復(fù) 制。各個進程將所復(fù)制的網(wǎng)絡(luò)通知拆包,識別是否為發(fā)送給該進程的通 知,如果不是則將該網(wǎng)絡(luò)通知丟棄,如果是則進行相應(yīng)操作。所述消息 隊列為循環(huán)隊列。
以下為采用上述多進程共享端口接收網(wǎng)絡(luò)通知的系統(tǒng)的具體通訊 方法。如圖3所示,其具體通訊步驟如下-1) 當啟動一個用戶進程時,首先檢測接收端是否已有可用的監(jiān) 聽進程;
2) 如果有可用的監(jiān)聽進程,則該用戶進程與該監(jiān)聽進程相對應(yīng) 消息隊列相聯(lián)系;如果沒有可用的監(jiān)聽進程,則根據(jù)需要自動啟動監(jiān) 聽進程,并建立相應(yīng)的消息隊列;
3) 監(jiān)聽進程打開指定的共享端口 ,通過TCP/IP協(xié)議接收發(fā)送端 發(fā)出的網(wǎng)絡(luò)通知;
4 )監(jiān)聽進程將共享端口接收到的網(wǎng)絡(luò)通知存放到所述消息隊列
中;
5) 用戶進程不斷對消息隊列進行輪詢,以獲取新的網(wǎng)絡(luò)通知并 進行處理;
6) 當所有的用戶進程退出時,監(jiān)聽進程自動關(guān)閉。
可見,通過上述通訊方法,接收端通過統(tǒng)一的的網(wǎng)絡(luò)接口接收網(wǎng) 絡(luò)通知,而各個不同的用戶進程是通過從消息隊列中復(fù)制相應(yīng)網(wǎng)絡(luò)通 知,實現(xiàn)接收消息的。這大大降低了同一網(wǎng)絡(luò)通知重復(fù)傳遞造成的資 源浪費,提高了通訊效率。
上述通訊方法中,步驟3、 4的監(jiān)聽進程控制共享端口的接收消息的 方法可以具體包括下述步驟
31) 監(jiān)聽進程打開指定的共享端口;
32) 監(jiān)聽進程檢查該共享端口是否收到網(wǎng)絡(luò)通知消息包;
33) 如果接收到網(wǎng)絡(luò)通知消息包,則將該消息包打上時間,然后存 放到消息隊列中;如果沒有接收到網(wǎng)絡(luò)通知消息包,則執(zhí)行步驟34;
34) 監(jiān)聽進程檢查是否仍有用戶進程在運行,如果所有用戶進程都 已退出,則退出程序;否則執(zhí)行步驟32。
上述通訊方法中,步驟5的用戶進程處理網(wǎng)絡(luò)通知的方法可以具體 包括下述步驟
51) 用戶進程啟動與消息隊列之間的消息接收線程;
52) 消息接收線程通過輪詢從消息隊列査找是否有未接收的網(wǎng)絡(luò) 通知;
53) 如果找到未接收的網(wǎng)絡(luò)通知,則用戶進程復(fù)制該網(wǎng)絡(luò)通知并 進行步驟54;如果沒找到未接收的網(wǎng)絡(luò)通知,返回步驟52;
54) 用戶進程檢查所復(fù)制網(wǎng)絡(luò)通知是否為本發(fā)送給該用戶進程的網(wǎng)絡(luò)通知,如果是則執(zhí)行相應(yīng)操作并返回步驟52;如果不是則丟棄該 網(wǎng)絡(luò)通知并返回步驟52;
55)當用戶進程結(jié)束時,結(jié)束接收線程。
本通訊系統(tǒng)特別適合于需要對多個模塊進行頻繁同步更新的通
訊領(lǐng)域,例如媒體資訊管理系統(tǒng)。圖4即給出了這樣一種媒體資訊管
理系統(tǒng)。其發(fā)送端按節(jié)目編目發(fā)送媒體信息,接收端需要相應(yīng)更新的 模塊包括自動轉(zhuǎn)碼模塊、素材歸檔模塊、節(jié)目發(fā)布模塊以及其它的節(jié) 目編目模塊,這些模塊均需要依據(jù)發(fā)送端發(fā)送的媒體信息進行更新。 采用本發(fā)明的通訊系統(tǒng)可以大大降低因重復(fù)發(fā)送所述媒體信息所占 用的網(wǎng)絡(luò)帶寬,提高了通訊的效率。
權(quán)利要求
1、一種實現(xiàn)多進程共享端口接收網(wǎng)絡(luò)通知的系統(tǒng),包括發(fā)送端和接收端,特征正在于所述接收端包括共享端口、監(jiān)聽進程、消息隊列和若干用戶進程;所述共享端口在監(jiān)聽進程的控制下,從網(wǎng)絡(luò)中接收發(fā)送來的網(wǎng)絡(luò)通知;所述監(jiān)聽進程將所接收的網(wǎng)絡(luò)通知保存在所述消息隊列中;所述各個用戶進程與該消息隊列相連,復(fù)制消息隊列中的網(wǎng)絡(luò)通知。
2、 如權(quán)利要求l所述的通訊系統(tǒng),其特征在于所述消息隊列為循 環(huán)隊列。
3、 一種實現(xiàn)多進程共享端口接收網(wǎng)絡(luò)通知的方法,基于所述權(quán)利要 求l的通訊系統(tǒng)實現(xiàn),其特征在于1) 當啟動一個用戶進程時,首先檢測接收端是否已有可用的監(jiān) 聽進程;2) 如果有可用的監(jiān)聽進程,則該用戶進程與該監(jiān)聽進程相對應(yīng) 消息隊列相聯(lián)系;如果沒有可用的監(jiān)聽進程,則根據(jù)需要自動啟動監(jiān) 聽進程,并建立相應(yīng)的消息隊列;3) 監(jiān)聽進程打開指定的共享端口 ,通過TCP/IP協(xié)議接收發(fā)送端 發(fā)出的網(wǎng)絡(luò)通知;4 )監(jiān)聽進程將共享端口接收到的網(wǎng)絡(luò)通知存放到所述消息隊列中;5) 用戶進程不斷對消息隊列進行輪詢,以獲取新的網(wǎng)絡(luò)通知并 進行處理;6) 當所有的用戶進程退出時,監(jiān)聽進程自動關(guān)閉。
4、 如權(quán)利要求3所述的通訊方法,其特征在于所述步驟3、 4包括如下具體步驟31) 監(jiān)聽進程打開指定的共享端口;32) 監(jiān)聽進程檢査該共享端口是否收到網(wǎng)絡(luò)通知消息包;33) 如果接收到網(wǎng)絡(luò)通知消息包,則將該消息包打上時間,然后存 放到消息隊列中;如果沒有接收到網(wǎng)絡(luò)通知消息包,則執(zhí)行步驟34;34) 監(jiān)聽進程檢查是否仍有用戶進程在運行,如果所有用戶進程都已退出,則退出程序;否則執(zhí)行步驟32。
5、如權(quán)利要求3所述的通訊方法,其特征在于所述步驟5包 括如下具體步驟51) 用戶進程啟動與消息隊列之間的消息接收線程;52) 消息接收線程通過輪詢從消息隊列查找是否有未接收的網(wǎng)絡(luò) 通知;53) 如果找到未接收的網(wǎng)絡(luò)通知,則用戶進程復(fù)制該網(wǎng)絡(luò)通知并進行步驟54;如果沒找到未接收的網(wǎng)絡(luò)通知,返回步驟52;54) 用戶進程檢查所復(fù)制網(wǎng)絡(luò)通知是否為本發(fā)送給該用戶進程的網(wǎng)絡(luò)通知,如果是則執(zhí)行相應(yīng)操作并返回步驟52;如果不是則丟棄該 網(wǎng)絡(luò)通知并返回步驟52;55) 當用戶進程結(jié)束時,結(jié)束接收線程。
全文摘要
一種實現(xiàn)多進程共享端口接收網(wǎng)絡(luò)通知的系統(tǒng),包括發(fā)送端和接收端,特征在于所述接收端包括共享端口、監(jiān)聽進程、消息隊列和若干用戶進程;所述共享端口在監(jiān)聽進程的控制下,從網(wǎng)絡(luò)中接收發(fā)送來的網(wǎng)絡(luò)通知;所述監(jiān)聽進程將所接收的網(wǎng)絡(luò)通知保存在所述消息隊列中;所述各個用戶進程與該消息隊列相連,復(fù)制消息隊列中的網(wǎng)絡(luò)通知。本發(fā)明通過提供這樣一種對同一計算機中的不同進程共享同一網(wǎng)絡(luò)端口接收網(wǎng)絡(luò)通知消息的系統(tǒng)及其方法,從而不需要為每個進程設(shè)置獨立的接收端口,降低了同一網(wǎng)絡(luò)通知重復(fù)傳遞造成的資源浪費。
文檔編號H04L12/26GK101296130SQ200810113928
公開日2008年10月29日 申請日期2008年5月30日 優(yōu)先權(quán)日2008年5月30日
發(fā)明者許紅昆 申請人:北京同步科技有限公司