本發(fā)明涉及網(wǎng)絡(luò)技術(shù),具體涉及ocf客戶端對(duì)alljoyn服務(wù)的發(fā)現(xiàn)技術(shù)。
背景技術(shù):
alljoyn的服務(wù)發(fā)現(xiàn)機(jī)制采用next-generationnameservice(ngns),ngns發(fā)現(xiàn)協(xié)議采用了通過使用alljoyn申請(qǐng)的多播地址和端口來發(fā)送基于多播的mdns。alljoyn服務(wù)消費(fèi)端調(diào)用findadvertisename()初始化ngns消息序列,ngns通過多播dns發(fā)送基于dns-sd的查詢消息;ngns使用alljoyn申請(qǐng)的多播地址和端口來發(fā)送基于多播的dns,ipv4組播地址為224.0.0.251,ipv6組播地址為ff02::fb,組播端口號(hào)為5353;任何與搜索名字匹配的服務(wù)提供端通過單播方式發(fā)送dns-sd消息響應(yīng)服務(wù)消費(fèi)端。
ocf的服務(wù)發(fā)現(xiàn)是基于coapdiscovery機(jī)制。所有發(fā)布中的ocf設(shè)備加入“allcoapnodes”多播分組,如ipv6中的ff0x::fd或監(jiān)聽端口“5683”。需要發(fā)現(xiàn)資源的ocf客戶端也加入該多播分組。ocf客戶端發(fā)送一個(gè)發(fā)現(xiàn)請(qǐng)求給多播分組和端口“5683”,請(qǐng)求的uri為/oic/res。如果ocf客戶端正處在發(fā)現(xiàn)指定資源類型的過程中,則它應(yīng)使用帶有指定“rt”參數(shù)的查詢指令,否則所有的ocf設(shè)備都會(huì)回復(fù)此請(qǐng)求。
可見,alljoyn系統(tǒng)的服務(wù)發(fā)現(xiàn)機(jī)制和ocf的資源發(fā)現(xiàn)機(jī)制使用兩種完全不同的發(fā)現(xiàn)協(xié)議,因此,alljoyn設(shè)備與ocf設(shè)備之間無法互相發(fā)現(xiàn)。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有alljoyn設(shè)備與ocf設(shè)備之間無法互相發(fā)現(xiàn)的問題,需要一種能夠?qū)崿F(xiàn)alljoyn設(shè)備與ocf設(shè)備之間互相發(fā)現(xiàn)的方案。
為此,本發(fā)明所要解決的技術(shù)問題是提供一種基于dns-sd的ocf客戶端對(duì)alljoyn服務(wù)的發(fā)現(xiàn)方法,使得alljoyn設(shè)備與ocf設(shè)備之間可互相發(fā)現(xiàn)。
為了解決上述技術(shù)問題,本發(fā)明提供的基于dns-sd的ocf客戶端對(duì)alljoyn服務(wù)的發(fā)現(xiàn)方法,通過發(fā)送符合alljoyn服務(wù)發(fā)現(xiàn)機(jī)制的dns-sd消息去發(fā)現(xiàn)alljoyn服務(wù)資源。
在本方案中,在ocf客戶端,通過ocf的資源發(fā)現(xiàn)接口發(fā)現(xiàn)alljoyn服務(wù)資源,并將該資源生成alljoyn標(biāo)準(zhǔn)的dns-sd查詢消息。
在本方案中,ocf客戶端的資源發(fā)現(xiàn)接口將ocf的resourceuri映射為dns-sd消息中的txt記錄的“path={uri}”,對(duì)應(yīng)于alljoyn的對(duì)象路徑;
將ocf的resourcetype映射為dns-sd消息中txt記錄的“name={resourcetype}”,對(duì)應(yīng)于alljoyn的well-knownname;
將ocf的resourceinteface映射為dns-sd消息中txt記錄的“if={resourceinterface}”,對(duì)應(yīng)于alljoyn的接口。
在本方案中,以多播的方式發(fā)送dns-sd消息。
在本方案中,alljoyn服務(wù)端收到dns-sd查詢消息后,進(jìn)行匹配,在alljoyn服務(wù)和ocf要發(fā)現(xiàn)的資源相互匹配后,返回相應(yīng)的dns-sd響應(yīng)消息給ocf客戶端。
在本方案中,ocf客戶端在接收到dns-sd響應(yīng)消息后,進(jìn)行解析得到alljoyn服務(wù)的資源屬性。
通過本方案可以實(shí)現(xiàn)ocf客戶端設(shè)備對(duì)alljoyn服務(wù)資源的發(fā)現(xiàn),實(shí)現(xiàn)了ocf協(xié)議與alljoyn協(xié)議互聯(lián)互通。
附圖說明
以下結(jié)合附圖和具體實(shí)施方式來進(jìn)一步說明本發(fā)明。
圖1為本方案中dns-sd消息的生成流程圖;
圖2為本方案中ocf客戶端發(fā)現(xiàn)alljoyn服務(wù)資源的流程圖;
圖3為本發(fā)明實(shí)例中ocf客戶端發(fā)現(xiàn)alljoyn服務(wù)資源的流程圖。
具體實(shí)施方式
為了使本發(fā)明實(shí)現(xiàn)的技術(shù)手段、創(chuàng)作特征、達(dá)成目的與功效易于明白了解,下面結(jié)合具體圖示,進(jìn)一步闡述本發(fā)明。
本方案基于dns-sd消息,有效實(shí)現(xiàn)ocf客戶端對(duì)alljoyn服務(wù)的發(fā)現(xiàn)。由ocf客戶端通過發(fā)送符合alljoyn服務(wù)發(fā)現(xiàn)機(jī)制的dns-sd消息去發(fā)現(xiàn)alljoyn服務(wù)資源。
為此,本方案在ocf客戶端,使用ocf的資源發(fā)現(xiàn)接口去發(fā)現(xiàn)alljoyn服務(wù)資源,此時(shí)使用的alljoyn服務(wù)資源符合ocf標(biāo)準(zhǔn)資源定義規(guī)范,擁有resourceuri,resourcetype等;ocf客戶端的資源發(fā)現(xiàn)接口將該資源生成alljoyn標(biāo)準(zhǔn)的dns-sd查詢消息,由此實(shí)現(xiàn)對(duì)ocf客戶端設(shè)備對(duì)alljoyn服務(wù)資源的發(fā)現(xiàn)。
其中,dns-sd(dns-basedservicediscovery)定義了一種配置dnsptr,srv和txt記錄的常規(guī)方法。
而alljoyn客戶端通過如下名字格式來查詢某一dnsptr記錄,從而發(fā)現(xiàn)某一服務(wù)的所有實(shí)例:
<service>.<domain>。
dns-sd響應(yīng)方返回dnssrv和dnstxt記錄,且srv和txt有如下的命名格式:
<instance>.<service>.<domain>。
在此基礎(chǔ)上,為生成符合alljoyn服務(wù)發(fā)現(xiàn)機(jī)制的dns-sd消息(即alljoyn標(biāo)準(zhǔn)的dns-sd消息),ocf客戶端發(fā)現(xiàn)資源接口需要提供resourceuri,resourcetype和resourceinterface。
同時(shí),ocf資源與alljoyndns-sd消息之間采用如下的映射規(guī)則:
將ocf的resourceuri映射為dns-sd消息中的txt記錄的“path={uri}”,對(duì)應(yīng)于alljoyn的對(duì)象路徑;
將ocf的resourcetype映射為dns-sd消息中txt記錄的“name={resourcetype}”,對(duì)應(yīng)于alljoyn的well-knownname;
將ocf的resourceinterface映射為dns-sd消息中txt記錄的“if={resourceinterface}”,對(duì)應(yīng)于alljoyn的接口。
據(jù)此,本方案中dns-sd消息的生成流程如下(參見圖1):
(1)定義要發(fā)現(xiàn)的alljoyn服務(wù)的resourceuri、resourcetype和resourceinterface,以及ocf客戶端應(yīng)用程序調(diào)用findresource()方法;
(2)c++sdk通過進(jìn)程間通信調(diào)用底層棧的資源發(fā)現(xiàn)方法ocdoresource()方法;
(3)ocstack接收到待發(fā)現(xiàn)alljoyn資源的參數(shù),按照上述對(duì)應(yīng)的映射規(guī)則轉(zhuǎn)化封裝成dns-sd消息;
(4)調(diào)用socket,以多播的方式發(fā)送dns-sd消息,其中ipv4組播地址為224.0.0.251,ipv6組播地址為ff02::fb,組播端口號(hào)為5353。
基于上述的dns-sd查詢消息,ocf客戶端在發(fā)送dns-sd查詢消息后,alljoyn服務(wù)端收到該dns-sd查詢消息,如果alljoyn服務(wù)端擁有和dns-sd查詢消息相同的well-knownname,將會(huì)返回相應(yīng)的dns-sd響應(yīng)消息給ocf客戶端,至此,完成ocf客戶端對(duì)alljoyn服務(wù)的發(fā)現(xiàn)過程。
由此,ocf客戶端基于dns-sd消息發(fā)現(xiàn)alljoyn服務(wù)的流程如下(參見圖2):
(1)alljoyn服務(wù)提供端連接alljoynrouter,注冊(cè)總線對(duì)象,申請(qǐng)well-knownname;
(2)alljoyn服務(wù)對(duì)象開啟mdns端口監(jiān)聽;
(3)ocf客戶端初始化,調(diào)用ocf資源發(fā)現(xiàn)接口,尋找alljoyn資源;
(4)ocstack根據(jù)發(fā)現(xiàn)的alljoyn資源屬性生成dns-sd查詢消息;
(5)按照mdns多播發(fā)送dns-sd查詢消息;
(6)alljoyn服務(wù)端收到dns-sd查詢消息,解析txt記錄,匹配對(duì)應(yīng)的well-knownname和接口;
(7)alljoyn服務(wù)和ocf要發(fā)現(xiàn)的資源相互匹配,alljoyn服務(wù)端發(fā)送dns-sd回復(fù);
(8)ocf客戶端收到dns-sd回復(fù),解析txt記錄,得到alljoyn服務(wù)的資源屬性,完成對(duì)alljoyn服務(wù)資源的發(fā)現(xiàn)過程。
下面以資源發(fā)現(xiàn)的實(shí)例具體闡述ocf客戶端基于dns-sd消息對(duì)alljoyn服務(wù)的發(fā)現(xiàn)過程。
首先,如下表所示,分別為alljoyn標(biāo)準(zhǔn)服務(wù)對(duì)象和ocf標(biāo)準(zhǔn)資源進(jìn)行定義:
由此,ocf客戶端對(duì)alljoyn服務(wù)的發(fā)現(xiàn)的整個(gè)流程如下(參見圖3):
(1)alljoyn服務(wù)提供端注冊(cè)總線對(duì)象,對(duì)象路徑為:/org/freedesktop/example,接口為:org.alljoyn.example.test。
(2)alljoyncore向alljoyn路由申請(qǐng)well-knownname:org.alljoyn.example。
(3)alljoyn服務(wù)端綁定端口,開啟mdns端口監(jiān)聽。
(4)ocf客戶端調(diào)用資源發(fā)現(xiàn)函數(shù),發(fā)現(xiàn)資源:
resourcetype:org.alljoyn.example,
resourceuri:/org/freedesktop/example,
resoueceinterface:org.alljoyn.example.test。
(5)ocstack根據(jù)alljoyn資源屬性生成對(duì)應(yīng)的dns-sd查詢消息。
(6)mdns多播發(fā)送dns-sd查詢消息。
(7)alljoyn服務(wù)端通過mdns端口監(jiān)聽,收到dns-sd查詢消息,解析txt記錄,匹配對(duì)應(yīng)的well-knownname,對(duì)象路徑和接口;
(8)在alljoyn服務(wù)和ocf要發(fā)現(xiàn)的資源相互匹配后,alljoyn服務(wù)端發(fā)送dns-sd回復(fù)(單播響應(yīng))。
(9)ocf客戶端收到dns-sd回復(fù),解析txt記錄,得到alljoyn服務(wù)的資源屬性,完成對(duì)alljoyn服務(wù)資源的發(fā)現(xiàn)過程。
由上實(shí)例可知,本方案實(shí)現(xiàn)了ocf客戶端對(duì)alljoyn服務(wù)的發(fā)現(xiàn),有效實(shí)現(xiàn)了ocf協(xié)議與alljoyn協(xié)議互聯(lián)互通。
以上顯示和描述了本發(fā)明的基本原理、主要特征和本發(fā)明的優(yōu)點(diǎn)。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實(shí)施例的限制,上述實(shí)施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會(huì)有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明范圍內(nèi)。本發(fā)明要求保護(hù)范圍由所附的權(quán)利要求書及其等效物界定。