亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法

文檔序號(hào):7778747閱讀:292來源:國知局
OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法
【專利摘要】本發(fā)明提供一種OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,Java程序運(yùn)行在OSGi框架下,C程序運(yùn)行于linux系統(tǒng)上,所述實(shí)現(xiàn)方法至少包括:在OSGi環(huán)境下注冊(cè)中轉(zhuǎn)消息Bundle,使Java程序能夠使用消息服務(wù),同時(shí)能響應(yīng)C程序發(fā)送過來的消息;C程序與中轉(zhuǎn)消息Bundle建立通訊socket,或者Java程序通過向中轉(zhuǎn)消息Bundle發(fā)起通訊請(qǐng)求,由中轉(zhuǎn)消息Bundle建立與C程序的socket;C程序通過中轉(zhuǎn)消息Bundle收發(fā)socket消息來與Java程序通訊;Java程序通過中轉(zhuǎn)消息Bundle的消息服務(wù)與C程序通訊。本發(fā)明的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法兼有通信的高效率和安全性;省去了開發(fā)JNI的大量時(shí)間,同時(shí)又為JAVA與C通信提供了可靠的庫支持,為C與Java通信環(huán)境搭建了很好的橋梁。
【專利說明】OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)通信的【技術(shù)領(lǐng)域】,特別是涉及一種OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]Java語言的功能很強(qiáng)大,但不是萬能的。在Java語言中,丟棄了指針這個(gè)功能強(qiáng)大且與底層交互密切的語言工具。單從效率層面上來講,Java與C相比較,Java的執(zhí)行效率遠(yuǎn)遠(yuǎn)低于C。對(duì)于一些算法要求比較高的,Java便不是最好的選擇。Java是一種面向?qū)ο蟮恼Z言,在各種紛繁復(fù)雜的APP應(yīng)用中,Java備享贊譽(yù),美名遠(yuǎn)播。這樣就帶來了 Java與C共存協(xié)同合作的問題。Java的創(chuàng)造者們?cè)陂_發(fā)之初就已經(jīng)考慮到了這一點(diǎn),在Java中提供了與 C/C++的編程接口,這就是 Java 本機(jī)接口(Java Native Interface, JNI)。
[0003]Unix D omain Socket即Uinx域套接字,用于同一臺(tái)機(jī)上運(yùn)行的進(jìn)程之間的通信。Unix域套接字的執(zhí)行效率比因特網(wǎng)域的套接字更高,它是實(shí)現(xiàn)Java與C通信的橋梁。
[0004]Open Service Gateway Initiative,即 OSGi (JSR291)亦稱做 Java 語言的動(dòng)態(tài)模塊系統(tǒng),它為模塊化應(yīng)用的開發(fā)定義了一個(gè)基礎(chǔ)架構(gòu)。簡(jiǎn)單的說,通過OSGi可以在后臺(tái)對(duì)設(shè)備組件進(jìn)行安裝、升級(jí)或卸載而無需打斷該設(shè)備的正常運(yùn)行。OSGi作為Java模塊化的載體,運(yùn)行在Java虛擬機(jī)(Java Virtual Machine, JVM)之上。
[0005]現(xiàn)有技術(shù)中,解決Java程序和C程序之間的通信問題,通常采用的方式有如下幾種:
[0006](I) Socket 通信方式
[0007]Socket是建立在傳輸協(xié)議(主要是TCP和UDP)上的一種套接字規(guī)范。套接字屏蔽了底層通信軟件和具體操作系統(tǒng)的差異,使得任何兩臺(tái)安裝了 TCP協(xié)議軟件和實(shí)現(xiàn)了要節(jié)制規(guī)范的計(jì)算機(jī)之間的通信成為可能。利用標(biāo)準(zhǔn)的Socket通信的方法,可以實(shí)現(xiàn)任何平臺(tái)任何進(jìn)程之間的Socket通信,從而實(shí)現(xiàn)信息的傳遞。然而,這種實(shí)現(xiàn)方案只能運(yùn)行在任何兩臺(tái)安裝了 TCP協(xié)議的機(jī)器之間,利用網(wǎng)絡(luò)套接字通信,而在其他環(huán)境下則無法運(yùn)行及通?目。
[0008](2)文件共享方式
[0009]通信雙方將需要傳遞的參數(shù)等信息,通過文件進(jìn)行傳遞。然而,這種方法需要注意線程同步和安全等問題,而且其效率也相對(duì)比較低下。同時(shí),由于該方式雖然較為簡(jiǎn)單易用,但是對(duì)文件的操作的安全性則成了通信的最大障礙。因此,在對(duì)效率要求比較高且對(duì)數(shù)據(jù)安全要求比較高的場(chǎng)合,這種方式便不可取了。
[0010](3)通過JNI方式
[0011 ] JNI是編寫Java本機(jī)方法和把JVM嵌入到本機(jī)應(yīng)用程序中的標(biāo)準(zhǔn)接口。通過JNI編寫程序,可以很方便的做到跨平臺(tái)移植。采用JNI是目前為止較為流行的Java通信方式。單獨(dú)使用JNI給JAVA與C之間的通信帶來較大的靈活性。但是JNI本身只是一系列通用接口,其實(shí)現(xiàn)依賴于設(shè)計(jì)者本身的技術(shù)解決方案,因此帶來不確定性。[0012]綜上所述,現(xiàn)有的方案的運(yùn)行環(huán)境各異且各有優(yōu)缺點(diǎn),有的運(yùn)行于不同主機(jī),有的運(yùn)行于JVM。OSGi是近年來新提出的標(biāo)準(zhǔn),Java模塊化是目前比較熱門的發(fā)展趨勢(shì),因此在嵌入式平臺(tái)下,OSGi環(huán)境中,提出一套Java與C的通信解決方案,同時(shí)能夠解決通信安全、通信效率等問題則顯得非常有必要。

【發(fā)明內(nèi)容】

[0013]鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,使得JAVA環(huán)境下的任務(wù)和C環(huán)境的任務(wù)能夠互相通信。
[0014]為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中Java程序運(yùn)行在OSGi框架下,C程序運(yùn)行于Iinux系統(tǒng)上,所述實(shí)現(xiàn)方法至少包括:在OSGi環(huán)境下注冊(cè)中轉(zhuǎn)消息Bundle,使Java程序能夠使用消息服務(wù),同時(shí)能響應(yīng)C程序發(fā)送過來的消息;C程序與中轉(zhuǎn)消息Bundle建立通訊socket,或者Java程序通過向中轉(zhuǎn)消息Bundle發(fā)起通訊請(qǐng)求,由中轉(zhuǎn)消息Bundle建立與C程序的socket ;C程序通過中轉(zhuǎn)消息Bundle收發(fā)socket消息來與Java程序通訊;Java程序通過中轉(zhuǎn)消息Bundle的消息服務(wù)與C程序通訊。
[0015]根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中:中轉(zhuǎn)消息之間采用Unix域套接字進(jìn)行通信。
[0016]根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中:中轉(zhuǎn)消息包括消息頭和消息數(shù)據(jù)。
[0017]進(jìn)一步地,根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中:所述消息頭包括源消息ID、目的消息ID、消息的類型和消息數(shù)據(jù)的長(zhǎng)度。
[0018]進(jìn)一步地,根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中:C程序和Java程序在收到中轉(zhuǎn)消息時(shí)會(huì)檢查消息頭字段,如果不符合消息頭定義的,將視為非法消息,進(jìn)行丟棄處理,并繼續(xù)進(jìn)行消息偵聽。
[0019]根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中:中轉(zhuǎn)消息采用字節(jié)流進(jìn)行發(fā)送接收。
[0020]根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中:C程序的中轉(zhuǎn)任務(wù)包括發(fā)送線程和接收線程,分別負(fù)責(zé)將消息發(fā)送至Java環(huán)境中,以及接收從Java環(huán)境中發(fā)來的消息。
[0021]根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中Java程序的中轉(zhuǎn)任務(wù)作為一個(gè)OSGi的Bundle ;當(dāng)所述Bundle激活時(shí),將初始化發(fā)送連接和接收連接,并且發(fā)布消息服務(wù)。
[0022]根據(jù)上述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其中Java中轉(zhuǎn)任務(wù)的接收線程和用戶任務(wù)操作同一個(gè)消息接收對(duì)象實(shí)例;接收對(duì)象的消息寫入和讀取都是同步方法。
[0023]如上所述,本發(fā)明的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,具有以下有益效果:
[0024](I)本發(fā)明采用Unix域套接字,其本身也作為socket通信的一種方式,但又是進(jìn)程間通信的一種方式,因此兼有通信的高效率和安全性;[0025](2) JNI的框架實(shí)現(xiàn)利用開源的JUDS (Java Unix Domain Sockets)庫直接進(jìn)行操作,從而省去了開發(fā)JNI的大量時(shí)間,同時(shí)又為JAVA與C通信提供了可靠的庫支持;
[0026](3)利用開源的Apache Felix可以很好的實(shí)現(xiàn)OSGi框架下,各模塊的交互管理,為C與Java通信環(huán)境搭建了很好的橋梁;
[0027](4 )本發(fā)明提出的通信協(xié)議可以實(shí)現(xiàn)可變數(shù)據(jù)、大批量字節(jié)流數(shù)據(jù)的傳遞,其高效率源自協(xié)議本身且并不復(fù)雜,且編碼簡(jiǎn)單。
【專利附圖】

【附圖說明】
[0028]圖1顯示為本發(fā)明的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)框架圖;
[0029]圖2顯示為本發(fā)明中C環(huán)境下消息接收的流程圖;
[0030]圖3顯示為本發(fā)明中建立socket的流程圖;
[0031]圖4顯示為本發(fā)明中在緩存區(qū)內(nèi)出現(xiàn)多條消息或者最后一條不完整時(shí)的處理方法流程圖;
[0032]圖5顯示為本發(fā)明中消息接收對(duì)象實(shí)例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0033]以下通過特定的具體實(shí)例說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過另外不同的【具體實(shí)施方式】加以實(shí)施或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。
[0034]需要說明的是,本實(shí)施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
[0035]OSGi的最原始目標(biāo)就是針對(duì)嵌入式和家庭網(wǎng)關(guān)應(yīng)用,但其對(duì)于模塊化、組件導(dǎo)向以及服務(wù)導(dǎo)向也具有較完美的支持。比較著名的OSGi的框架有Equinox和Apache Felix等等。本發(fā)明選用Java庫環(huán)境支持較好的Felix。Felix是一個(gè)OSGi版本4規(guī)范的Apache實(shí)現(xiàn)。Felix的操作簡(jiǎn)易,人性化的CLI命令接口可以方便的對(duì)OSGi環(huán)境下的Bundle進(jìn)行組織管理。同時(shí),OSGi本身也定義了 Bundle之間的通信,從而為中轉(zhuǎn)消息帶來方便,無需另外定義中轉(zhuǎn)消息機(jī)制。
[0036]OSGi環(huán)境中包括中轉(zhuǎn)消息模塊,庫組件模塊,以及JavaApp的自定義模塊。
[0037]其中,中轉(zhuǎn)消息模塊是本發(fā)明的核心Java模塊,其中原理也是基于消息的收發(fā)整合,包括接收消息進(jìn)程、發(fā)送消息接口、消息池、消息工廠等等。
[0038]庫組件模塊指cling、gstream這類的支持庫,需要編成Bundle放到OSGi環(huán)境中。庫組件模塊是給JavaApp的基礎(chǔ)運(yùn)行和功能庫。
[0039]JavaApp的自定義模塊是運(yùn)行在OSGi環(huán)境上的各個(gè)Java應(yīng)用。
[0040]本發(fā)明的通信機(jī)制基于嵌入式的Iinux環(huán)境,搭載于VOS (Virtual OS)平臺(tái)上,在Iinux下運(yùn)行JVM,并植入OSGi環(huán)境中。C環(huán)境下不同任務(wù)之間的通信利用Iinux的消息隊(duì)列實(shí)現(xiàn)Java環(huán)境下不同任務(wù)之間的通信利用OSGi框架提供的服務(wù)注冊(cè)機(jī)制實(shí)現(xiàn)。[0041 ] 參照?qǐng)D1,OSGi環(huán)境下Java和C的通信機(jī)制如下:
[0042]在OSGi環(huán)境下注冊(cè)中轉(zhuǎn)消息Bundle,使Java程序能夠使用消息服務(wù),同時(shí)能響應(yīng)C程序發(fā)送過來的消息;
[0043]C程序與中轉(zhuǎn)消息Bundle建立通訊socket,或者Java程序通過向中轉(zhuǎn)消息Bundle發(fā)起通訊請(qǐng)求,由中轉(zhuǎn)消息Bundle建立與C程序的socket ;
[0044]C程序通過中轉(zhuǎn)消息Bundle收發(fā)socket消息來與Java程序通訊;Java程序通過中轉(zhuǎn)消息Bundle的消息服務(wù)與C程序通訊。
[0045]C環(huán)境和Java環(huán)境都有各種的中轉(zhuǎn)任務(wù)進(jìn)程,負(fù)責(zé)消息的解析轉(zhuǎn)發(fā)。所有C環(huán)境下的任務(wù)如果想與Java環(huán)境下的任務(wù)通信,必須經(jīng)過中轉(zhuǎn)消息完成。中轉(zhuǎn)消息之間的采用Unix域套接字通信。
[0046]在本發(fā)明中,OSGi和Iinux環(huán)境進(jìn)程間通訊的中轉(zhuǎn)消息采用消息頭加消息數(shù)據(jù)的組織形式來完成通信需求。消息頭部分能完成消息目的地址、消息類型、消息長(zhǎng)度等解析,完成消息校驗(yàn),從而保證中轉(zhuǎn)消息能夠正確被C和Java兩端解析。由于該中轉(zhuǎn)消息結(jié)構(gòu)定義了基本的通信框架,故可以很方便地?cái)U(kuò)展到不同的通信需求上。
[0047]中轉(zhuǎn)消息的具體結(jié)構(gòu)見下表,其中表中的前4項(xiàng)為消息頭的內(nèi)容,第5項(xiàng)是消息數(shù)據(jù)的內(nèi)容。
[0048]表1、中轉(zhuǎn)消息的結(jié)構(gòu)
[0049]
【權(quán)利要求】
1.一種OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于Java程序運(yùn)行在OSGi框架下,C程序運(yùn)行于Iinux系統(tǒng)上,所述實(shí)現(xiàn)方法至少包括: 在OSGi環(huán)境下注冊(cè)中轉(zhuǎn)消息Bundle,使Java程序能夠使用消息服務(wù),同時(shí)能響應(yīng)C程序發(fā)送過來的消息; C程序與中轉(zhuǎn)消息Bundle建立通訊socket,或者Java程序通過向中轉(zhuǎn)消息Bundle發(fā)起通訊請(qǐng)求,由中轉(zhuǎn)消息Bundle建立與C程序的socket ; C程序通過中轉(zhuǎn)消息Bundle收發(fā)socket消息來與Java程序通訊;Java程序通過中轉(zhuǎn)消息Bundle的消息服務(wù)與C程序通訊。
2.根據(jù)權(quán)利要求1所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:中轉(zhuǎn)消息之間采用Unix域套接字進(jìn)行通信。
3.根據(jù)權(quán)利要求1所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:中轉(zhuǎn)消息包括消息頭和消息數(shù)據(jù)。
4.根據(jù)權(quán)利要求3所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:所述消息頭包括源消息ID、目的消息ID、消息的類型和消息數(shù)據(jù)的長(zhǎng)度。
5.根據(jù)權(quán)利要求3所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:C程序和Java程序在收到中轉(zhuǎn)消息時(shí)會(huì)檢查消息頭字段,如果不符合消息頭定義的,將視為非法消息,進(jìn)行丟棄處理,并繼續(xù)進(jìn)行消息偵聽。
6.根據(jù)權(quán)利要求1所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:中轉(zhuǎn)消息采用字節(jié)流進(jìn)行發(fā)送接收。
7.根據(jù)權(quán)利要求1所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:C程序的中轉(zhuǎn)任務(wù)包括發(fā)送線程和接收線程,分別負(fù)責(zé)將消息發(fā)送至Java環(huán)境中,以及接收從Java環(huán)境中發(fā)來的消息。
8.根據(jù)權(quán)利要求1所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:Java程序的中轉(zhuǎn)任務(wù)作為一個(gè)OSGi的Bundle ;當(dāng)所述Bundle激活時(shí),將初始化發(fā)送連接和接收連接,并且發(fā)布消息服務(wù)。
9.根據(jù)權(quán)利要求1所述的OSGi環(huán)境下Java和C的通信機(jī)制的實(shí)現(xiàn)方法,其特征在于:Java中轉(zhuǎn)任務(wù)的接收線程和用戶任務(wù)操作同一個(gè)消息接收對(duì)象實(shí)例;接收對(duì)象的消息寫入和讀取都是同步方法。
【文檔編號(hào)】H04L29/06GK103746959SQ201310637671
【公開日】2014年4月23日 申請(qǐng)日期:2013年11月27日 優(yōu)先權(quán)日:2013年11月27日
【發(fā)明者】倪同貴, 鄧兵, 施晨 申請(qǐng)人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1