本發(fā)明實(shí)施例涉及網(wǎng)絡(luò)通信領(lǐng)域,并且更具體地涉及數(shù)據(jù)資源傳輸?shù)姆椒ê驮O(shè)備。
背景技術(shù):
輕量級(jí)應(yīng)用層協(xié)議(constrainedapplicationprotocol,簡(jiǎn)稱(chēng)“coap”)主要是用于物聯(lián)網(wǎng)(machinetomachine,簡(jiǎn)稱(chēng)“m2m”)的場(chǎng)景中,比如:家庭控制器、樓宇自動(dòng)化、智能能源、傳感器網(wǎng)絡(luò)等。在這樣的環(huán)境中,這些機(jī)器的功能比較簡(jiǎn)單,一般處理器只有8位,存儲(chǔ)空間小,不支持復(fù)雜的傳輸協(xié)議,數(shù)據(jù)傳輸速率也較低。coap提供一種請(qǐng)求/響應(yīng)的交互模式,支持內(nèi)嵌的資源發(fā)現(xiàn),包括關(guān)鍵的網(wǎng)頁(yè)概念,比如統(tǒng)一資源標(biāo)識(shí)(uri)和內(nèi)容類(lèi)型。coap可以很容易地翻譯到超文本鏈接協(xié)議(http),用于集成到網(wǎng)絡(luò)中?;赾oap傳輸數(shù)據(jù)的傳統(tǒng)方案中不計(jì)算數(shù)據(jù)資源的準(zhǔn)確容量,無(wú)法評(píng)估分包的精確數(shù)目,因此無(wú)法并發(fā)獲取數(shù)據(jù)資源,造成傳輸效率低下。
另外由于很多使用coap的設(shè)備處理能力較低,最大傳輸速率也低,所以在激活多個(gè)連接或者同時(shí)處理多個(gè)請(qǐng)求時(shí),coap設(shè)備就很容易面臨擁塞問(wèn)題,導(dǎo)致無(wú)法及時(shí)處理后續(xù)新發(fā)生的任務(wù)。為了解決擁塞,現(xiàn)有coap協(xié)議中規(guī)定了一種消息重發(fā)控制機(jī)制,當(dāng)coap客戶(hù)端設(shè)備向服務(wù)器設(shè)備發(fā)送的需要確認(rèn)的(confirmable)消息并且長(zhǎng)時(shí)間沒(méi)有得到響應(yīng)時(shí)(擁塞等問(wèn)題導(dǎo)致),客戶(hù)端設(shè)備會(huì)在tn秒后重發(fā)該消息并重復(fù)若干次,直到收到服務(wù)器設(shè)備發(fā)回的響應(yīng)消息或者達(dá)到最大重發(fā)次數(shù)限制而放棄嘗試;設(shè)默認(rèn)重發(fā)間隔為x秒且當(dāng)前為第n次重發(fā),則tn=x+random(0~2n),其中random(0~2n)為0到2n之間的任一隨機(jī)整數(shù),因此該方法也被稱(chēng)為指數(shù)后退算法,每次重發(fā)的時(shí)間間隔以指數(shù)級(jí)增加,給予服務(wù)器設(shè)備更寬松的響應(yīng)時(shí)間。但現(xiàn)有技術(shù)使用的算法是基于時(shí)隙的,消息級(jí)別的擁塞控制,并不能有效解決節(jié)點(diǎn)級(jí)別的擁塞問(wèn)題,當(dāng)server因?yàn)橘Y源處理能力達(dá)到瓶頸,或者發(fā)生異常的時(shí)候,指數(shù)后退就顯得杯水車(chē)薪了,而且因?yàn)槭莄lient端的隨機(jī)算法,也完全沒(méi)有考慮到server的具體狀態(tài),嚴(yán)重時(shí)候可能會(huì)進(jìn)一步加重?fù)砣?/p>
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)資源傳輸?shù)姆椒ê驮O(shè)備,能夠支持在coap中提高傳輸效率。
在本發(fā)明實(shí)施例中,提供了一種在物聯(lián)網(wǎng)系統(tǒng)中基于輕量級(jí)應(yīng)用層協(xié)議的節(jié)點(diǎn)的數(shù)據(jù)資源傳輸方法,包括:向服務(wù)器發(fā)送攜帶響應(yīng)方式選項(xiàng)的請(qǐng)求消息,其中所述響應(yīng)方式選項(xiàng)表示以下響應(yīng)方式其中一項(xiàng):一次性的立即響應(yīng)、推遲的一次性的響應(yīng)、推遲的多個(gè)響應(yīng)和取消推遲的多個(gè)響應(yīng);接收所述服務(wù)器發(fā)送的根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息
在本發(fā)明實(shí)施例中,提供了一種在物聯(lián)網(wǎng)系統(tǒng)中基于輕量級(jí)應(yīng)用層協(xié)議的節(jié)點(diǎn)的數(shù)據(jù)資源傳輸方法,包括:接收客戶(hù)端發(fā)送的攜帶響應(yīng)方式選項(xiàng)的請(qǐng)求消息,其中所述響應(yīng)方式選項(xiàng)表示以下響應(yīng)方式其中一項(xiàng):一次性的立即響應(yīng)、推遲的一次性的響應(yīng)、推遲的多個(gè)響應(yīng)和取消推遲的多個(gè)響應(yīng);向客戶(hù)端發(fā)送根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息。
在本發(fā)明實(shí)施例中,提供了一種在物聯(lián)網(wǎng)系統(tǒng)中基于輕量級(jí)應(yīng)用層協(xié)議傳輸節(jié)點(diǎn)的數(shù)據(jù)資源的客戶(hù)端,包括:發(fā)送模塊,用于向服務(wù)器發(fā)送攜帶響應(yīng)方式選項(xiàng)的請(qǐng)求消息,其中所述響應(yīng)方式選項(xiàng)表示以下響應(yīng)方式其中一項(xiàng):一次性的立即響應(yīng)、推遲的一次性的響應(yīng)、推遲的多個(gè)響應(yīng)和取消推遲的多個(gè)響應(yīng);接收模塊,用于接收根據(jù)響應(yīng)方式選項(xiàng)生成的響應(yīng)消息。
在本發(fā)明實(shí)施例中,提供了一種在物聯(lián)網(wǎng)系統(tǒng)中基于輕量級(jí)應(yīng)用層協(xié)議傳輸節(jié)點(diǎn)的數(shù)據(jù)資源的服務(wù)器設(shè)備,包括:接收模塊,用于接收客戶(hù)端發(fā)送的攜帶響應(yīng)方式選項(xiàng)的請(qǐng)求消息,其中所述響應(yīng)方式選項(xiàng)表示以下響應(yīng)方式其中一項(xiàng):一次性的立即響應(yīng)、推遲的一次性的響應(yīng)、推遲的多個(gè)響應(yīng)和取消推遲的多個(gè)響應(yīng);發(fā)送模塊,向所述客戶(hù)端發(fā)送根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息。
根據(jù)本發(fā)明實(shí)施例,通過(guò)在消息交互過(guò)程中指定響應(yīng)方式選項(xiàng),客戶(hù)端可以指定所需的響應(yīng),提高了coap的消息交互效率。
根據(jù)本發(fā)明實(shí)施例,可以對(duì)響應(yīng)方式進(jìn)行指示,并根據(jù)所指示的響應(yīng)方式接收響應(yīng)消息,這樣便于請(qǐng)求方進(jìn)行會(huì)話處理,以提高傳輸效率,比如:在指示延遲響應(yīng)時(shí)間的情況下,避免請(qǐng)求方一直等待響應(yīng)消息,可以在指示的延遲時(shí)間過(guò)期后,提前結(jié)束會(huì)話;在請(qǐng)求方指示立即響應(yīng)時(shí),如果在請(qǐng)求方自定義的超時(shí)時(shí)間內(nèi),不能接收到響應(yīng)消息,也可以提前結(jié)束會(huì)話;在指示延遲的多次響應(yīng)時(shí),請(qǐng)求方可以保存資源訂閱的信息,以便于接收多個(gè)推遲的響應(yīng)。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。在附圖中:
圖1是本發(fā)明一種實(shí)施例的傳輸數(shù)據(jù)的方法的流程圖;
圖2是本發(fā)明一種實(shí)施例的網(wǎng)關(guān)從傳感器獲取數(shù)據(jù)資源的具體實(shí)現(xiàn)過(guò)程的流程圖;
圖3是本發(fā)明一種實(shí)施例中改進(jìn)的分片選項(xiàng)的結(jié)構(gòu)圖;
圖4是本發(fā)明一種替代實(shí)施例的網(wǎng)關(guān)從傳感器獲取數(shù)據(jù)資源具體實(shí)現(xiàn)過(guò)程的流程圖;
圖5是本發(fā)明一種替代實(shí)施例中改進(jìn)的分片選項(xiàng)的結(jié)構(gòu)圖;
圖6是本發(fā)明一種替代實(shí)施例的網(wǎng)關(guān)從傳感器獲取數(shù)據(jù)資源的具體實(shí)現(xiàn)過(guò)程的流程圖;
圖7是本發(fā)明一種替代實(shí)施例中改進(jìn)的分片選項(xiàng)的結(jié)構(gòu)圖;
圖8是本發(fā)明一種實(shí)施例的網(wǎng)關(guān)向傳感器發(fā)送數(shù)據(jù)資源的具體實(shí)現(xiàn)過(guò)程的流程圖;
圖9是本發(fā)明一種實(shí)施例的客戶(hù)端設(shè)備的框圖;
圖10是本發(fā)明一種實(shí)施例的服務(wù)器設(shè)備的框圖;
圖11是本發(fā)明一種實(shí)施例的傳輸數(shù)據(jù)的方法的流程圖;
圖12是本發(fā)明一種實(shí)施例的傳輸數(shù)據(jù)的方法的流程圖;
圖13是本發(fā)明一種實(shí)施例的消息交互圖;
圖14是本發(fā)明一種實(shí)施例的消息交互圖;
圖15是本發(fā)明一種實(shí)施例的消息交互圖;
圖16是本發(fā)明一種實(shí)施例的傳輸數(shù)據(jù)的客戶(hù)端的結(jié)構(gòu)圖;
圖17是本發(fā)明一種實(shí)施例的傳輸數(shù)據(jù)的服務(wù)器的結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
coap是基于用戶(hù)數(shù)據(jù)報(bào)協(xié)議(userdatagramprotocol,簡(jiǎn)稱(chēng)“udp”)進(jìn)行傳輸,是基于無(wú)連接的消息處理模式。其交互模式可以是同步的響應(yīng),也可以是異步的響應(yīng)。消息類(lèi)型可以是:需要確認(rèn)的消息(confirmable)、不需要確認(rèn)的消息(non-confirmable)、確認(rèn)消息(acknowledgement)、重置消息(reset)??梢酝ㄟ^(guò)消息標(biāo)識(shí)(messageid)來(lái)關(guān)聯(lián)一對(duì)請(qǐng)求和響應(yīng)。
coap支持的方法有四個(gè):獲取資源(get)、更新資源(put)、創(chuàng)建資源(post)和刪除資源(delete)。資源通過(guò)表述性狀態(tài)轉(zhuǎn)移(representationalstatetransfer,簡(jiǎn)稱(chēng)“rest”)uri來(lái)識(shí)別。我們通常稱(chēng)資源的擁有方為節(jié)點(diǎn)或服務(wù)器,包括但不限于傳感器、控制器、端點(diǎn)(end-point)等,請(qǐng)求資源方為客戶(hù)端,包括但不限于網(wǎng)關(guān)(proxy)、網(wǎng)絡(luò)側(cè)設(shè)備。
coap協(xié)議支持不同的選項(xiàng)(option),用以解釋coap消息體中數(shù)據(jù)的語(yǔ)義,比如block(分片)、location(位置)、token(令牌)選項(xiàng)等,不同的選項(xiàng)支持不同的功能,并且可以通過(guò)定義新的option來(lái)擴(kuò)展新的功能。
coap支持分片選項(xiàng)(blockoption),主要用于將較大的資源進(jìn)行分片傳輸,以適應(yīng)于低帶寬傳輸?shù)膽?yīng)用場(chǎng)景。block選項(xiàng)可以為1個(gè)字節(jié)、2個(gè)字節(jié)或3個(gè)字節(jié),依據(jù)分片數(shù)目的容量所需要的長(zhǎng)度進(jìn)行選取。
傳統(tǒng)方案中不計(jì)算數(shù)據(jù)資源的準(zhǔn)確容量,無(wú)法評(píng)估分包的精確數(shù)目,因此無(wú)法并發(fā)獲取。另外也不知道資源是靜態(tài)的還是動(dòng)態(tài)的。
在以下描述中,通常稱(chēng)資源的擁有方為服務(wù)器,以傳感器作為示例,請(qǐng)求資源方為客戶(hù)端,以網(wǎng)關(guān)作為示例。但是,傳感器或者網(wǎng)關(guān)并不用作對(duì)服務(wù)器或者客戶(hù)端的限制。
由于不知道目標(biāo)資源的精確容量,網(wǎng)關(guān)在<get>命令中使用blockoption時(shí),只能按順序來(lái)獲取,即選獲取block0,等block0返回時(shí),再獲取block1,一直到最后一個(gè)block。不能并發(fā)地發(fā)送<get>請(qǐng)求。
block選項(xiàng)的字段結(jié)構(gòu)一般包括num字段,m字段和szx字段,其中
num表示分片的順序序號(hào),可以是4~20位的無(wú)符號(hào)整型數(shù)字。0表示第一個(gè)分片。
m:用一個(gè)比特位來(lái)表示當(dāng)前分片后面是否還有其他分片,其值為1表示后面還有分片,為0表示后面沒(méi)有分片,即為最后一個(gè)分片。
szx:用于表征分片容量,其計(jì)算公式為:分片容量=2^(szx+4),即2的(szx+4)次方。由于szx由3個(gè)比特位來(lái)表示,其值可以為0~7,所以分片容量的取值范圍:2^4~2^11,即16~2048。
對(duì)于block選項(xiàng)的使用說(shuō)明如下:
在<get>請(qǐng)求中,block選項(xiàng)的num字段給出當(dāng)前請(qǐng)求的分片的序號(hào),并且當(dāng)分片序號(hào)為0時(shí),szx給出網(wǎng)關(guān)建議的每個(gè)分片的容量。在<get>響應(yīng)中或是<put>/<post>請(qǐng)求中,block選項(xiàng)的num字段描述當(dāng)前傳輸?shù)姆制男蛱?hào),m字段表明后面是否還有后續(xù)分片。
在<put>/<post>響應(yīng)中,block選項(xiàng)的num字段表明當(dāng)前響應(yīng)的分片序號(hào)。
當(dāng)網(wǎng)關(guān)使用<get>方法獲取第一個(gè)分片(block)時(shí),num被設(shè)置為0,并攜帶建議的分片容量(即szx),傳感器節(jié)點(diǎn)可以選擇同意建議的分片容量,或是選擇一個(gè)比建議分片小的分片,并在響應(yīng)中返回,同時(shí),在響應(yīng)中返回第一個(gè)分片的數(shù)據(jù)。
本發(fā)明考慮網(wǎng)關(guān)事先獲知目標(biāo)資源的精確容量,則網(wǎng)關(guān)可以選擇是否用blockoption來(lái)發(fā)送資源獲取的請(qǐng)求,也可以實(shí)現(xiàn)并發(fā)請(qǐng)求,即在請(qǐng)求block0的同時(shí),也可以請(qǐng)求block1,而不必等待。在請(qǐng)求block的順序上也可以靈活處理。
簡(jiǎn)單設(shè)計(jì)方案中,blockoption有三個(gè)選擇,可以是一個(gè)字節(jié),可以是2個(gè)字節(jié),也可以是三個(gè)字節(jié),依據(jù)資源的容量不同,分片(block)的數(shù)量容量不同,所需要的長(zhǎng)度也不一樣。協(xié)議規(guī)定,除了最后一個(gè)分片外,分片的容量必須相同,但每次傳輸中,還是每次都需要攜帶m位(表明后面是否還有分片)和szx(分片的容量)。
每次在請(qǐng)求和響應(yīng)中,m位和szx位都需要傳送,而實(shí)際上,除了最后一個(gè)分片外,m位和szx的值每次都是相同的,重復(fù)的傳輸浪費(fèi)傳輸資源。重復(fù)發(fā)送szx的目的假定雙方都不保存協(xié)商后的szx,第一次響應(yīng)中攜帶的是協(xié)商后的szx,網(wǎng)關(guān)從響應(yīng)中獲取并再次在請(qǐng)求中發(fā)送,從而網(wǎng)關(guān)和傳感器都不需要保存狀態(tài)。在一次的請(qǐng)求響應(yīng)回合中,共浪費(fèi)一個(gè)字節(jié),如果分片數(shù)目很多時(shí),浪費(fèi)的字節(jié)就很多了,對(duì)于m2m設(shè)備,傳輸資源是受限的,這個(gè)傳輸資源的浪費(fèi)是很可觀的。假設(shè)要傳送的數(shù)據(jù)為64m的話,每個(gè)block的負(fù)載(payload)容量為1024byte則發(fā)送的block條目數(shù)為:65536。則發(fā)送的block選項(xiàng)按照字節(jié)來(lái)分的個(gè)數(shù)為:
(1)一個(gè)字節(jié):16個(gè)
(2)兩個(gè)字節(jié):4080個(gè)
(3)三個(gè)字節(jié):61440個(gè)
如果m和szx可以不發(fā)送,則請(qǐng)求加上響應(yīng)能夠節(jié)省的數(shù)據(jù)為65536字節(jié)(byte),即64k數(shù)據(jù)。另外,如果這兩個(gè)字段不要,則num字段可以用滿(mǎn)所有位(bit),則需要發(fā)送的數(shù)據(jù)包的數(shù)目變更為:
(1)一個(gè)字節(jié):256個(gè)
(2)兩個(gè)字節(jié):65280個(gè)
此時(shí)不需要發(fā)送3個(gè)字節(jié)的結(jié)構(gòu),因此還可以節(jié)省數(shù)據(jù)為61440*2bytes,即60k數(shù)據(jù)。則總共節(jié)省數(shù)據(jù)位124k,節(jié)省數(shù)據(jù)率0.189%。頭域節(jié)省百分比為(16+4080*2+61440*3-256-65280*2)/(16+4080*2+61440*3)=61680/192496=32%。
節(jié)省數(shù)據(jù)量的公式:
t為總的block數(shù)量,s為分片容量(blocksize),節(jié)省的流量的百分比(只比較頭域):
t<16時(shí):無(wú)節(jié)省;兩者都是一個(gè)字節(jié);
16<t<256時(shí):1-t*1/(16*1+(t-16)*2),簡(jiǎn)單設(shè)計(jì)方案需要2個(gè)字節(jié),優(yōu)選方案只需要一個(gè)字節(jié);
256<t<4096時(shí):1-(256*1+(t-256)*2))/(16*1+(t-16)*2),簡(jiǎn)單設(shè)計(jì)方案需要2個(gè)字節(jié),優(yōu)選方案需要2個(gè)字節(jié);
4096<t<65256時(shí):1-(256*1+(4096-256)*2+(t-4096)*3))/(256*1+(t-256)*2),簡(jiǎn)單設(shè)計(jì)方案需要3個(gè)字節(jié),優(yōu)選方案需要2個(gè)字節(jié)。
t>65256時(shí),無(wú)節(jié)省,本發(fā)明優(yōu)選方案實(shí)施例和簡(jiǎn)單設(shè)計(jì)方案都需要3個(gè)字節(jié)。
簡(jiǎn)單設(shè)計(jì)方案中,使用put/post命令時(shí),分片容量協(xié)商缺乏效率。在put/post請(qǐng)求中,對(duì)于第一個(gè)分片,需要發(fā)送第一個(gè)分片的數(shù)據(jù)和推薦的分片容量,如果傳感器節(jié)點(diǎn)選擇不一樣的分片容量,網(wǎng)關(guān)需要按照傳感器的分片容量進(jìn)行重新發(fā)送,則上次發(fā)送的分片數(shù)據(jù)被浪費(fèi)掉了。而且,網(wǎng)關(guān)在使用put/post請(qǐng)求基于分片選項(xiàng)發(fā)送容量大的資源時(shí),事先無(wú)法告知傳感器資源容量信息,在傳輸過(guò)程中,傳感器邊接收,邊緩存所接收的資源,如果傳感器發(fā)現(xiàn)存儲(chǔ)空間不夠,而資源又未傳輸完成時(shí),只能發(fā)送回一個(gè)413的錯(cuò)誤狀態(tài)碼,表示請(qǐng)求的資源太大,結(jié)束此次傳輸。此前傳輸?shù)牟糠仲Y源則沒(méi)用了,傳輸資源被浪費(fèi)了。如果網(wǎng)關(guān)能夠在第一個(gè)分片消息中告知傳感器所要傳輸?shù)馁Y源的容量信息,傳感器則可以比較資源容量信息與存儲(chǔ)容量,如果容量不足,提前返回413“請(qǐng)求的資源太大”的狀態(tài)碼,來(lái)結(jié)束資源傳輸,以此來(lái)達(dá)到節(jié)省傳輸資源的目的。
互聯(lián)網(wǎng)上的斷點(diǎn)續(xù)傳,也就是要從文件已經(jīng)下載的地方開(kāi)始繼續(xù)下載。網(wǎng)關(guān)在向傳感器請(qǐng)求數(shù)據(jù)的時(shí)候,要多加一條信息來(lái)表示請(qǐng)求下載數(shù)據(jù)的范圍(range),表明從哪里開(kāi)始。
比如,網(wǎng)關(guān)用瀏覽器來(lái)傳遞請(qǐng)求信息給web傳感器,要求從2000070字節(jié)開(kāi)始:
get/down.ziphttp/1.0
user-agent:netfox
range:bytes=2000070-
accept:text/html,image/gif,image/jpeg,*;q=.2,*/*;q=.2
其中,range:bytes=2000070-,這一行的意思就是告訴傳感器down.zip這個(gè)文件從2000070字節(jié)開(kāi)始傳,前面的字節(jié)不用傳了。
這種方案的缺點(diǎn)是,沒(méi)有分片機(jī)制,不支持分片容量的協(xié)商,也不支持分片總數(shù)的協(xié)商。本發(fā)明實(shí)施例考慮了在分片傳輸過(guò)程中,進(jìn)行分片容量和/或分片總數(shù)的協(xié)商。為此本發(fā)明提供了一種數(shù)據(jù)分片傳輸?shù)姆椒?,可以獲取目標(biāo)數(shù)據(jù)資源的精確容量,進(jìn)行分片容量的協(xié)商,獲取分片總數(shù),并根據(jù)分片總數(shù)進(jìn)行數(shù)據(jù)資源傳輸。
以下參照?qǐng)D1具體說(shuō)明本發(fā)明一種實(shí)施例的流程。圖1是本發(fā)明一種實(shí)施例的流程圖。
在s110過(guò)程中,獲取節(jié)點(diǎn)的數(shù)據(jù)資源的容量信息。如果是網(wǎng)關(guān)從傳感器獲取數(shù)據(jù),則節(jié)點(diǎn)的數(shù)據(jù)資源容量信息保存在傳感器上。網(wǎng)關(guān)可以通過(guò)請(qǐng)求消息,向傳感器獲取節(jié)點(diǎn)的數(shù)據(jù)資源的容量信息。如果是網(wǎng)關(guān)向傳感器發(fā)送數(shù)據(jù),則網(wǎng)關(guān)本地已經(jīng)知道了節(jié)點(diǎn)的數(shù)據(jù)資源的容量信息。獲取節(jié)點(diǎn)的數(shù)據(jù)資源容量信息,是為下一步進(jìn)行分片容量的協(xié)商并確定分片總數(shù)做準(zhǔn)備。
接著,在s120的過(guò)程中,網(wǎng)關(guān)向傳感器發(fā)送攜帶第一分片選項(xiàng)的請(qǐng)求消息,其中所述第一分片選項(xiàng)包括推薦的分片容量。傳感器在收到s120中發(fā)送的請(qǐng)求消息之后,根據(jù)自身能力,確定本次數(shù)據(jù)資源傳輸過(guò)程中所使用的分片容量,并且傳感器確定的分片容量小于等于網(wǎng)關(guān)推薦的分片容量。
在s130,網(wǎng)關(guān)接收攜帶第二分片選項(xiàng)的響應(yīng)消息,其中所述第二分片選項(xiàng)包括確定的分片容量,所述確定的分片容量小于等于所述推薦的分片容量。網(wǎng)關(guān)在接到確定的分片容量之后,根據(jù)掌握的節(jié)點(diǎn)的數(shù)據(jù)資源容量信息,確定將要傳輸?shù)墓?jié)點(diǎn)的數(shù)據(jù)資源的分片總數(shù)。
然后,在s140,根據(jù)所述確定的分片容量以及所述節(jié)點(diǎn)的數(shù)據(jù)資源容量信息,分片傳輸所述數(shù)據(jù)資源。
根據(jù)本發(fā)明實(shí)施例,可以獲知需要傳輸?shù)臄?shù)據(jù)資源的容量信息,并通過(guò)分片容量協(xié)商確定傳輸數(shù)據(jù)時(shí)使用的分片容量,由此可以實(shí)現(xiàn)傳輸過(guò)程中錯(cuò)誤率降低,并且可以并發(fā)地傳輸數(shù)據(jù)。
以下結(jié)合圖2說(shuō)明如圖1所示實(shí)施例的具體實(shí)現(xiàn)過(guò)程。圖2表示的是網(wǎng)關(guān)從傳感器獲取數(shù)據(jù)的說(shuō)明性示例,僅為說(shuō)明本發(fā)明的構(gòu)思,而不作為對(duì)本發(fā)明的限制。
圖2所示數(shù)據(jù)資源獲取過(guò)程具體描述如下:
es210:網(wǎng)關(guān)向傳感器發(fā)送資源發(fā)現(xiàn)請(qǐng)求,即通過(guò)get./wellknown/core來(lái)獲取傳感器上的資源列表。
es220:傳感器向網(wǎng)關(guān)返回資源列表,以及資源指示信息;資源指示信息主要包括資源的尋址信息(即uri)、資源名稱(chēng)、資源描述信息、內(nèi)容類(lèi)型等。本發(fā)明對(duì)資源指示信息進(jìn)行擴(kuò)展,擴(kuò)展的資源指示信息包括:資源是動(dòng)態(tài)資源還是靜態(tài)資源的指示信息。
es230:網(wǎng)關(guān)根據(jù)傳感器返回的資源列表,根據(jù)資源的指示信息,從中選擇目標(biāo)資源,并根據(jù)識(shí)別標(biāo)識(shí)(能唯一識(shí)別資源的信息,比如資源名稱(chēng)、uri等),獲取目標(biāo)資源。
es240:傳感器對(duì)目標(biāo)資源容量進(jìn)行判斷,如果資源容量小于一個(gè)傳輸層消息包的容量,則直接返回資源內(nèi)容給網(wǎng)關(guān);如果資源容量超過(guò)一個(gè)傳輸層消息包的容量,則返回資源容量信息??蛇x地,傳感器可使用分片選項(xiàng),根據(jù)自身確定的分片容量,直接返回第一個(gè)分片。后續(xù)客戶(hù)端和傳感器根據(jù)此確定的分片容量,使用分片選項(xiàng)傳輸如下的分片。
在本發(fā)明一種替代實(shí)施例中,如果目標(biāo)數(shù)據(jù)資源為動(dòng)態(tài)數(shù)據(jù)資源,同時(shí)返回動(dòng)態(tài)數(shù)據(jù)資源指示給網(wǎng)關(guān),并用413“請(qǐng)求資源太大”的狀態(tài)碼指示網(wǎng)關(guān)使用block選項(xiàng)來(lái)獲取資源。
如果數(shù)據(jù)資源為動(dòng)態(tài)資源,則指示信息中的資源容量表示的是當(dāng)前的資源快照(snapshot)的容量信息,傳感器需要緩存此快照數(shù)據(jù);如果是靜態(tài)資源,則指示信息中的資源容量信息是精確的容量信息。本領(lǐng)域技術(shù)人員應(yīng)該理解,如果數(shù)據(jù)資源為動(dòng)態(tài)資源,則傳感器可以發(fā)送資源快照的校驗(yàn)碼,網(wǎng)關(guān)如果需要更新鮮的數(shù)據(jù),可以后續(xù)再發(fā)送新的資源獲取請(qǐng)求。
es250:網(wǎng)關(guān)根據(jù)數(shù)據(jù)資源容量信息,判斷需要使用分片選項(xiàng),并發(fā)送攜帶分片選項(xiàng)的請(qǐng)求消息,與傳感器器進(jìn)行分片容量協(xié)商,指示推薦的分片容量。
es260:傳感器根據(jù)自身能力,確定分片容量,并將其返回給網(wǎng)關(guān)??蛇x地,傳感器同時(shí)返回分片總數(shù)。當(dāng)然,由于網(wǎng)關(guān)已經(jīng)獲取了數(shù)據(jù)資源容量信息,分片總數(shù)也可以由網(wǎng)關(guān)確定。需要說(shuō)明的是,傳感器確定的分片容量只能小于或等于網(wǎng)關(guān)推薦的分片容量。
es270:網(wǎng)關(guān)從1一直到分片總數(shù),依次向傳感器發(fā)送請(qǐng)求,請(qǐng)求獲取與分片序號(hào)對(duì)應(yīng)的數(shù)據(jù)資源的分片數(shù)據(jù)。
es280:傳感器根據(jù)確定的分片容量,返回該分片序號(hào)及與該分片序號(hào)對(duì)應(yīng)的數(shù)據(jù)資源的分片數(shù)據(jù),直到完全傳輸完畢。
根據(jù)本發(fā)明的一種優(yōu)選實(shí)施例,es270中可以實(shí)現(xiàn)并行處理,即網(wǎng)關(guān)可以同時(shí)請(qǐng)求獲取多個(gè)分片消息,而不需要等待傳感器返回對(duì)前一個(gè)分片請(qǐng)求消息的響應(yīng)消息。
es210至es240的代碼例如為:
req:get/.well-known/core---發(fā)送請(qǐng)求到默認(rèn)的uri,即根目錄獲取資源列表;
res:200ok--響應(yīng)標(biāo)識(shí)獲取成功,并攜帶了2組資源指示信息;
</sensors/temp>;ct=41;n="temperaturec",--溫度資源,內(nèi)容類(lèi)型41,名稱(chēng)為temperaturec;
</sensors/light>;ct=41;n="lightlux"--燈光資源,內(nèi)容類(lèi)型41,名稱(chēng)為lightlux;
</sensors/firmware>;ct=52;n="firmware";snapshot=0--固件資源,內(nèi)容類(lèi)型52,名稱(chēng)為firmware,非動(dòng)態(tài)資源;
</sensors/log>;ct=52;n="log";snapshot=1--固件資源,內(nèi)容類(lèi)型52,名稱(chēng)為log,動(dòng)態(tài)資源,當(dāng)前數(shù)據(jù)為快照snapshot;
req:get/sensors/firmware–請(qǐng)求固件資源
res:413“requestentitytoolarge”size:88000.413狀態(tài)碼表明請(qǐng)求的資源太大,其精確容量為88000字節(jié)。
如果數(shù)據(jù)資源為動(dòng)態(tài)資源,即數(shù)據(jù)資源在傳輸?shù)倪^(guò)程會(huì)動(dòng)態(tài)變化,例如可以采用以下兩種方案實(shí)施處理:
(1)在開(kāi)始傳送數(shù)據(jù)資源時(shí),對(duì)該資源建立快照(snapshot),即緩存此刻該數(shù)據(jù)資源的容量信息,并傳輸這個(gè)容量信息,不管后續(xù)的變化;對(duì)應(yīng)上述方案。
(2)如果數(shù)據(jù)資源在傳輸過(guò)程中被修改,傳感器可以在任意一個(gè)獲取數(shù)據(jù)資源的請(qǐng)求消息的響應(yīng)消息中,返回錯(cuò)誤碼,指示數(shù)據(jù)資源已更改,網(wǎng)關(guān)需要重新獲取。
可選地,網(wǎng)關(guān)和傳感器在消息交互中,增加認(rèn)證信息。認(rèn)證信息中可包含身份標(biāo)識(shí)(id)、基于身份標(biāo)識(shí)和密碼(password)算出來(lái)的密鑰信息(digest)。身份標(biāo)識(shí)和密碼可以是預(yù)先配置給網(wǎng)關(guān)和傳感器雙方。配置過(guò)程:
例如,密鑰的算法可以為:digest=md5(id:password),即對(duì)id和password組成的字符串使用md5算法進(jìn)行哈希(hash),hash的值為digest。發(fā)送方發(fā)送id和digest,接收方根據(jù)接收到id和預(yù)先存儲(chǔ)的password,根據(jù)同樣的算法得出digest,與發(fā)送方發(fā)送的digest進(jìn)行比較,如果一致,則認(rèn)證通過(guò)。
網(wǎng)關(guān)從傳感器獲取數(shù)據(jù)資源時(shí),如圖2所示,需要知道數(shù)據(jù)資源容量信息。根據(jù)本發(fā)明一種實(shí)施例,網(wǎng)關(guān)可以采用如下方案來(lái)獲取存儲(chǔ)于傳感器的數(shù)據(jù)資源容量信息。
(1)擴(kuò)展鏈接格式(link-format)關(guān)鍵字
在link-format中,擴(kuò)展一個(gè)關(guān)鍵字,-sn,或-snapshot,用于在獲取數(shù)據(jù)資源請(qǐng)求的響應(yīng)中,表明資源數(shù)據(jù)是否是快照數(shù)據(jù)。如果此參數(shù)不存在,或其值為0,表明是靜態(tài)資源,如果此參數(shù)的值為1,則表明是當(dāng)前數(shù)據(jù)是動(dòng)態(tài)資源,獲取的數(shù)據(jù)是當(dāng)前的快照。靜態(tài)資源是指一段時(shí)間內(nèi)相對(duì)穩(wěn)定的資源,即資源內(nèi)容不會(huì)頻繁更改。具體含義可以在標(biāo)準(zhǔn)中進(jìn)行定義。在本發(fā)明中,主要指資源的值不改變的情況。
還擴(kuò)展關(guān)鍵字:-asz,表明資源的準(zhǔn)確容量的信息。
消息實(shí)例:
網(wǎng)關(guān)向傳感器發(fā)送資源發(fā)現(xiàn)的請(qǐng)求:
req:get/.well-known/core---發(fā)送請(qǐng)求到默認(rèn)的uri,即根目錄獲取資源列表
傳感器向網(wǎng)關(guān)發(fā)送資源的響應(yīng):
res:200ok--響應(yīng)標(biāo)識(shí)獲取成功,并攜帶了2組資源指示信息
</sensors/temp>;ct=41;n="temperaturec",--溫度資源,內(nèi)容類(lèi)型41,名稱(chēng)為temperaturec
</sensors/light>;ct=41;n="lightlux"--燈光資源,內(nèi)容類(lèi)型41,名稱(chēng)為lightlux
</sensors/firmware>;ct=52;n="firmware";asz=65000;snapshot=0--固件資源,內(nèi)容類(lèi)型52,名稱(chēng)為firmware,非動(dòng)態(tài)資源,精確容量為65000字節(jié);
</sensors/log>;ct=52;n="log";asz=88000;snapshot=1--固件資源,內(nèi)容類(lèi)型52,名稱(chēng)為log,動(dòng)態(tài)資源,當(dāng)前數(shù)據(jù)為快照snapshot,其精確容量為88000字節(jié);
此響應(yīng)消息是封裝在coap消息的消息體中的,接收方(即網(wǎng)關(guān))根據(jù)link-format標(biāo)準(zhǔn)中的規(guī)定進(jìn)行解析。
(2)增加狀態(tài)碼
在收到網(wǎng)關(guān)的數(shù)據(jù)資源獲取請(qǐng)求時(shí),如果資源太大,一個(gè)包傳送不下,傳感器用狀態(tài)碼來(lái)通知網(wǎng)關(guān),用于表明,資源太大,需要用blockoption來(lái)請(qǐng)求。
比如,可以規(guī)定狀態(tài)碼413,用于表明當(dāng)前數(shù)據(jù)資源容量過(guò)大,指示網(wǎng)關(guān)在請(qǐng)求中用block選項(xiàng)。可以根據(jù)需要規(guī)定其他的狀態(tài)碼,以用于表示其他含義,用于其它目的。
消息實(shí)例:
網(wǎng)關(guān)向傳感器發(fā)送資源獲取的請(qǐng)求:
get/sensordata
傳感器向網(wǎng)關(guān)發(fā)送帶狀態(tài)碼的響應(yīng):
ack413(狀態(tài)碼,表明數(shù)據(jù)資源容量太大)
(3)在coap的頭字段(header)中增加一個(gè)表明容量(size)的選項(xiàng)(option)
網(wǎng)關(guān)在請(qǐng)求中,可以用容量選項(xiàng)(sizeoption)來(lái)指示傳感器,讓傳感器返回?cái)?shù)據(jù)資源的容量;傳感器在響應(yīng)中,用sizeoption來(lái)指明數(shù)據(jù)資源的容量。
或者是,即使網(wǎng)關(guān)沒(méi)有sizeoption的指示,傳感器也在響應(yīng)中用sizeoption指明資源容量,尤其是資源比較大的情況下,傳感器應(yīng)該指示。
如果資源較小,傳感器直接在消息體(body)中返回資源數(shù)據(jù),則網(wǎng)關(guān)應(yīng)該以資源數(shù)據(jù)的實(shí)際容量為準(zhǔn),sizeoption中表明的資源容量可以用于核對(duì)。
如果資源較大,傳感器不返回資源數(shù)據(jù),只用sizeoption返回?cái)?shù)據(jù)的容量,同時(shí)用狀態(tài)碼指示給網(wǎng)關(guān),讓網(wǎng)關(guān)發(fā)起新的請(qǐng)求,用blockoption來(lái)請(qǐng)求。
sizeoption的代碼可以為16,數(shù)據(jù)類(lèi)型為整型,數(shù)據(jù)長(zhǎng)度為1~4個(gè)字節(jié),數(shù)據(jù)單位為字節(jié)。sizeoption主要用于<get>方法的響應(yīng)中,<put>/<post>方法的請(qǐng)求中,用于表示資源的容量;如果是在<get>方法的請(qǐng)求中,其值沒(méi)有實(shí)際的意義,推薦置為0。
消息實(shí)例:
網(wǎng)關(guān)向傳感器發(fā)送資源獲取的請(qǐng)求:
get/sensordata
傳感器向網(wǎng)關(guān)發(fā)送帶狀態(tài)碼的響應(yīng):
ack+413+size51200(50k字節(jié))
以下結(jié)合圖3說(shuō)明如圖1所示實(shí)施例的具體實(shí)現(xiàn)過(guò)程。圖3表示的是網(wǎng)關(guān)向傳感器發(fā)送數(shù)據(jù)的說(shuō)明性示例,僅為說(shuō)明本發(fā)明的構(gòu)思,而不作為對(duì)本發(fā)明的限制。
當(dāng)網(wǎng)關(guān)使用<get>方法獲取第一個(gè)分片(block)數(shù)據(jù)時(shí),num字段被設(shè)置為0,并攜帶推薦的分片容量(即szx),傳感器可以選擇同意推薦的分片容量,或是選擇一個(gè)小于等于推薦的分片容量的分片容量,并在響應(yīng)中返回,同時(shí),在響應(yīng)中返回第一個(gè)分片的分片數(shù)據(jù)。因此,在num字段為0時(shí),<get>請(qǐng)求有雙重語(yǔ)義,一是獲取第一個(gè)分片數(shù)據(jù),二是進(jìn)行分片容量的協(xié)商。這樣帶來(lái)協(xié)議在處理上的二義性,而且無(wú)法攜帶數(shù)據(jù)容量等信息。
本發(fā)明實(shí)施例對(duì)此進(jìn)行了改進(jìn),在本發(fā)明的一種實(shí)施例中,網(wǎng)關(guān)在<get>方法的請(qǐng)求中使用blockoption時(shí),如果num字段被設(shè)置為0,表示雙方只進(jìn)行分片容量的協(xié)商,以及分片總數(shù)的協(xié)商。即傳感器在響應(yīng)中,使用num字段返回分片總數(shù),使用szx字段返回傳感器確定的分片容量。m字段可以去掉,節(jié)省一個(gè)bit,用于num字段。因?yàn)檎?qǐng)求方,例如網(wǎng)關(guān)知道分片總數(shù),所以從分片的num字段就可以知道該分片是否是最后一個(gè)分片,因此就不需要再使用m字段。在這種情況下,如果請(qǐng)求獲取第一個(gè)分片的分片數(shù)據(jù),則將num設(shè)置為1,依次類(lèi)推。
需要說(shuō)明的是,如果網(wǎng)關(guān)發(fā)送第一個(gè)請(qǐng)求時(shí),不知道數(shù)據(jù)資源的容量,所以blockoption可以使用一個(gè)字節(jié),如果傳感器的數(shù)據(jù)資源較大,分片數(shù)目較大,則傳感器可以在響應(yīng)中使用二個(gè)字節(jié)或者三個(gè)字節(jié)來(lái)返回分片總數(shù)。
當(dāng)blockoption為2個(gè)字節(jié)時(shí),其設(shè)計(jì)成szx字段占用第二個(gè)字節(jié)的最后三位,表示分片容量;num字段占用第一個(gè)字節(jié)加上第二個(gè)字節(jié)的前5位,表示當(dāng)前分片序號(hào);如果是在num為0的請(qǐng)求對(duì)應(yīng)的響應(yīng)消息中,則表示分片總數(shù)。本領(lǐng)域技術(shù)人員理解,可以用消息標(biāo)識(shí)(messageid)來(lái)關(guān)聯(lián)請(qǐng)求與響應(yīng),即請(qǐng)求和響應(yīng)中都攜帶唯一的事務(wù)標(biāo)識(shí),這樣傳感器就能理解此響應(yīng)消息是用于返回分片總數(shù)。
以下舉例說(shuō)明分片容量協(xié)商過(guò)程,消息實(shí)例為:
網(wǎng)關(guān)向傳感器發(fā)送資源獲取的請(qǐng)求:
get00000101(num為0,szx為101,即5,表示分片容量為2的9次方,即512)
傳感器向網(wǎng)關(guān)發(fā)送的響應(yīng):
ack10000100(num為:10000,即總分片數(shù)為32,szx為100,即4,表示分片容量為2的8次方,即256)
此設(shè)計(jì)省掉了一個(gè)比特位(bit),即把m位給省掉了,技術(shù)優(yōu)勢(shì)是節(jié)省了數(shù)據(jù)流量并且對(duì)現(xiàn)有設(shè)計(jì)的改動(dòng)不大。在這種實(shí)施方式中,分片容量(szx)字段每次仍然要發(fā)送。
在現(xiàn)有技術(shù)中,分片容量(即szx字段)每次都要發(fā)送,不管是在請(qǐng)求消息中還是響應(yīng)消息中,除了第一個(gè)分片和最后一個(gè)分片中使用的分片容量可能不一樣之外,其他的分片容量全部都是一樣的。重復(fù)互相傳輸相同的num字段浪費(fèi)了傳輸資源。
在本發(fā)明實(shí)施例中,網(wǎng)關(guān)在<get>方法的請(qǐng)求中使用blockoption時(shí),如果num被設(shè)置為0,表示雙方只進(jìn)行分片容量的協(xié)商,以及分片總數(shù)的協(xié)商。即傳感器在響應(yīng)中,使用num字段返回總的分片數(shù),使用szx字段返回傳感器確定的分片容量。并且網(wǎng)關(guān)和傳感器雙方存儲(chǔ)所確定的分片容量,用于之后的分片數(shù)據(jù)傳輸消息。除了最后一個(gè)分片數(shù)據(jù)之外。網(wǎng)關(guān)在后續(xù)<get>方法的請(qǐng)求中,只發(fā)送所請(qǐng)求的當(dāng)前分片序號(hào),而不發(fā)送已經(jīng)確定并保持不變的分片容量,而且傳感器在響應(yīng)消息中,也只發(fā)送當(dāng)前的分片序號(hào)和與該分片序號(hào)對(duì)應(yīng)的分片數(shù)據(jù),不再發(fā)送分片容量。在這種情況下,num為1時(shí),表示請(qǐng)求第一個(gè)分片的分片數(shù)據(jù),依次類(lèi)推。
以采用<get>命令從傳感器獲取數(shù)據(jù)資源為例,說(shuō)明上述實(shí)施例,
如圖3所示,新的blockoption的設(shè)計(jì)如下:
其中結(jié)構(gòu)(1)用于num為0的情況:
在<get>請(qǐng)求中,num為0,szx是第二個(gè)字節(jié),表示分片容量,totalnumber表示分片總數(shù),在請(qǐng)求時(shí)不使用,不需要攜帶;在<get>響應(yīng)中,num為0,szx表示傳感器確定的分片容量,totalnumber表示分片總數(shù)。
在現(xiàn)有技術(shù)中,分片容量的間隔比較大,比如2048、1024、512,不夠靈活。而實(shí)際上,512對(duì)于一個(gè)block來(lái)說(shuō),比較小,最好是剛好能夠放到一個(gè)udp包里,即1472個(gè)字節(jié)。本發(fā)明對(duì)此進(jìn)行了改進(jìn),在一種實(shí)施例中,對(duì)于szx,可以采取新的公式,比如:(szx+1)*8,則其范圍可以為:8~2048,但是遞減間隔為8。
圖3中的結(jié)構(gòu)(2)和結(jié)構(gòu)(3)用于<get>請(qǐng)求中num不為0的情況,即獲取分片數(shù)據(jù)時(shí)的情況:
當(dāng)num小于256時(shí),用一個(gè)字節(jié)來(lái)表示分片序號(hào),即結(jié)構(gòu)(2);當(dāng)num大于2的8次方(即256),小于2的16次方(即65536)時(shí),使用兩個(gè)字節(jié)來(lái)表示分片序號(hào),即結(jié)構(gòu)(3)。
由于結(jié)構(gòu)(2)中的num必須大于0,結(jié)構(gòu)(3)中的num字段的前一個(gè)字節(jié)也大于0,因此可以與結(jié)構(gòu)(1)區(qū)分開(kāi),對(duì)于<get>響應(yīng),num字段的值與請(qǐng)求中一樣,也可以區(qū)分開(kāi)。
以下舉例說(shuō)明,消息實(shí)例為:
網(wǎng)關(guān)向傳感器發(fā)送資源獲取的請(qǐng)求:
get0000000000000101(num為0,szx為101,即5,表示分片容量為2的9次方,即512)
傳感器向網(wǎng)關(guān)發(fā)送的響應(yīng):
ack00000000000001000000000000010000(num為0,totalnumber為10000,即分片總數(shù)為32,szx為100,即4,表示分片容量為2的8次方,即256)。
通過(guò)對(duì)blockoption重新設(shè)計(jì),可以在每個(gè)請(qǐng)求或響應(yīng)中至少減少發(fā)送4個(gè)比特位,在分片較多的情況下,可以極大地提高傳輸效率,節(jié)省傳輸資源,同時(shí)也提高了網(wǎng)關(guān)和傳感器雙方的處理效率。
圖4示出了本發(fā)明的一種替代實(shí)施例。在圖4所示實(shí)施例中,es410至es420與圖2所示實(shí)施例的es210至es240相同,不再重復(fù)描述。
在圖4所示實(shí)施例中,在es450,網(wǎng)關(guān)向傳感器發(fā)送<get>請(qǐng)求,使用分片選項(xiàng)進(jìn)行分片容量協(xié)商,指示網(wǎng)關(guān)推薦的分片容量。在es460中,傳感器選擇并確定合適的分片容量,用于將資源進(jìn)行分片,并將所有分片數(shù)據(jù)主動(dòng)推送給網(wǎng)關(guān),而不需要網(wǎng)關(guān)再發(fā)<get>請(qǐng)求。
在圖4實(shí)施例獲取數(shù)據(jù)資源過(guò)程中,分片選項(xiàng)的設(shè)計(jì)如圖5所示,其中:
結(jié)構(gòu)(1)用于網(wǎng)關(guān)向傳感器發(fā)送<get>請(qǐng)求,szx字段表示網(wǎng)關(guān)推薦的分片容量,傳感器最終選擇并確定的分片容量小于等于網(wǎng)關(guān)推薦的分片容量,num為0表示網(wǎng)關(guān)請(qǐng)求完整資源,num不為0表示網(wǎng)關(guān)請(qǐng)求具體第num個(gè)分片數(shù)據(jù),num不為0時(shí)傳感器只能使用szx字段所指示的分片容量。
結(jié)構(gòu)(2)和結(jié)構(gòu)(3)用于傳感器向網(wǎng)關(guān)返回完整資源的分片響應(yīng)消息,如果針對(duì)某個(gè)具體分片數(shù)據(jù)請(qǐng)求的應(yīng)答,不需要攜帶分片選項(xiàng),結(jié)構(gòu)(2)和(3)中的m字段表示是否為最后一個(gè)分片,如果是m字段為0則表示最后一個(gè)分片,為1表示不是最后一個(gè)分片,num字段表示傳感器所返回的是第幾個(gè)分片。
以下舉例說(shuō)明。消息實(shí)例為:
網(wǎng)關(guān)向傳感器發(fā)送數(shù)據(jù)資源獲取的請(qǐng)求:
conget0000000000000101(num為0,szx為101,即5,表示分片容量為2的9次方,即512)
傳感器向網(wǎng)關(guān)發(fā)送的響應(yīng):
ack20000000011(num為1,m為1,表示發(fā)送的第一個(gè)分片,并且不是最后一個(gè)分片,分片容量為szx字段指定的容量);
傳感器繼續(xù)向網(wǎng)關(guān)發(fā)送coap響應(yīng):
con20000000101(num為2,m為1,表示發(fā)送的第二個(gè)分片,并且不是最后一個(gè)分片,分片容量為szx字段指定的容量);
網(wǎng)關(guān)返回對(duì)con的ack響應(yīng);
傳感器向網(wǎng)關(guān)發(fā)送最后一個(gè)分片:
con20000000110(num為3,m為0,表示發(fā)送的第三個(gè)分片,并且是最后一個(gè)分片,具體分片容量由實(shí)際讀出數(shù)據(jù)算出)。
根據(jù)圖4所示的實(shí)施例,在網(wǎng)關(guān)從傳感器獲取完整的數(shù)據(jù)資源時(shí),僅需完成分片容量的協(xié)商,而不用發(fā)送大量的分片數(shù)據(jù)獲取請(qǐng)求,大大節(jié)省了數(shù)據(jù)傳輸流量。
圖6示出了本發(fā)明的另一種替代實(shí)施例。在圖6所示實(shí)施例中,es610至es640與圖2所示實(shí)施例的es210至es240相同,因此不再重復(fù)描述。
圖6與圖2所示實(shí)施例不同之處在于,在es650,網(wǎng)關(guān)向傳感器發(fā)送<get>請(qǐng)求,請(qǐng)求獲取資源,使用分片選項(xiàng),指示網(wǎng)關(guān)推薦的分片容量,此時(shí)num字段填充的值為0,表示請(qǐng)求獲取最后一個(gè)分片;在es660,傳感器響應(yīng)網(wǎng)關(guān)請(qǐng)求,返回確定的分片容量以及最后一個(gè)分片的序號(hào)及與之對(duì)應(yīng)的分片數(shù)據(jù)。由于最后一個(gè)分片序號(hào)對(duì)應(yīng)分片總數(shù),所以在es670,網(wǎng)關(guān)就可以依次或者并發(fā)獲取其他分片數(shù)據(jù)的請(qǐng)求。在es680,傳感器根據(jù)確定的分片容量,返回該分片的序號(hào)及對(duì)應(yīng)的分片數(shù)據(jù)。es670和es680可以多次進(jìn)行交互,直至分片數(shù)據(jù)傳輸完畢。
圖6實(shí)施例中采用的分片選項(xiàng)如圖7所示,例如采用兩個(gè)字節(jié)的分片選項(xiàng),僅包括num字段和szx字段。
以下結(jié)合圖6和圖7舉例說(shuō)明,消息實(shí)例為:
網(wǎng)關(guān)向傳感器發(fā)送資源獲取的請(qǐng)求:
conget0000000000000101(num為0,表示要求獲取最后一個(gè)分片,szx為101,即5,表示推薦的分片容量為2的9次方,即512)。
傳感器向網(wǎng)關(guān)發(fā)送的響應(yīng):
ack0000000001000101(num為1000即為8,表示返回的是第8個(gè)分片,szx為101即5,表示確定的分片容量為2的9次方,即512);
根據(jù)第一次的返回信息,網(wǎng)關(guān)已經(jīng)知道了一共有8個(gè)分片,并且得到了第8個(gè)分片的數(shù)據(jù),網(wǎng)關(guān)繼續(xù)向傳感器發(fā)送coap請(qǐng)求,可以依次獲取也可以并發(fā)獲取剩下的分片數(shù)據(jù)。以下消息實(shí)例為請(qǐng)求獲取第一個(gè)分片的分片數(shù)據(jù):
conget0000000000001101(num為1,表示要求獲取第一個(gè)分片,szx為101,即5,表示分片容量為2的9次方,即512);
傳感器返回對(duì)con的ack響應(yīng),即第一個(gè)分片的數(shù)據(jù);
網(wǎng)關(guān)可以依次或并發(fā)請(qǐng)求所有剩余分片,直到獲取完所有的數(shù)據(jù)。
根據(jù)圖6所示的實(shí)施例,可以在分片容量協(xié)商的同時(shí),獲取最后一個(gè)分片的分片數(shù)據(jù),在后續(xù)分片數(shù)據(jù)獲取過(guò)程中,所使用的分片容量均相同,因此可以結(jié)合前述優(yōu)選實(shí)施例的描述,網(wǎng)關(guān)可以在發(fā)送獲取分片數(shù)據(jù)的請(qǐng)求時(shí),不再發(fā)送szx字段,而僅發(fā)送num字段,由此可以節(jié)省數(shù)據(jù)流量,提高傳輸效率。
圖8示出了使用分片選項(xiàng)向傳感器發(fā)送數(shù)據(jù),例如使用資源創(chuàng)建(post)或更新(put)請(qǐng)求時(shí)的實(shí)施例。以下結(jié)合圖8進(jìn)行具體描述。
圖8所示詳細(xì)的流程說(shuō)明如下:
es810:網(wǎng)關(guān)向傳感器發(fā)送資源創(chuàng)建(post)或更新(put)請(qǐng)求消息,利用size選項(xiàng)發(fā)送資源的容量信息,利用分片選項(xiàng)指示推薦的分片容量及分片總數(shù),此處所述的分片總數(shù)是基于推薦的分片容量和待發(fā)送的數(shù)據(jù)資源的容量計(jì)算出的,請(qǐng)求消息體中不攜帶具體的資源數(shù)據(jù)。
es820:傳感器如果愿意接收此數(shù)據(jù),則返回狀態(tài)碼例如為100(即指示客戶(hù)端繼續(xù)發(fā)送),同時(shí)向網(wǎng)關(guān)返回確定的分片容量,所述確定的分片容量只能小于或等于網(wǎng)關(guān)推薦的分片容量;如果傳感器不愿意接收此數(shù)據(jù),則返回錯(cuò)誤碼指示客戶(hù)端不要繼續(xù)發(fā)送數(shù)據(jù)。比如,傳感器的存儲(chǔ)容量不足以存儲(chǔ)所指示的資源容量的數(shù)據(jù),則返回413“requestentitytoolarge”的返回碼。
es830:網(wǎng)關(guān)根據(jù)傳感器返回的確定的分片容量,判斷是否與推薦的分片容量相同,如果相同,則跳轉(zhuǎn)到es360;如果不相同,則根據(jù)傳感器返回的確定的分片容量信息,并根據(jù)數(shù)據(jù)資源容量,重新計(jì)算分片總數(shù)。
es840:網(wǎng)關(guān)重新向傳感器發(fā)送確定的分片容量和重新計(jì)算的分片總數(shù)。
es850:傳感器返回確定的分片容量。
es860:網(wǎng)關(guān)從根據(jù)分片序號(hào)從1一直到分片總數(shù),依次向傳感器發(fā)送與分片序號(hào)對(duì)應(yīng)的數(shù)據(jù)資源的分片數(shù)據(jù),直到完全傳輸完畢。
es870:傳感器返回確定接收的消息,其中包含接收到的分片序號(hào)。
根據(jù)本發(fā)明的一種優(yōu)選實(shí)施例,es860中可以進(jìn)行并行處理,即網(wǎng)關(guān)可以同時(shí)向傳感器發(fā)送多個(gè)分片數(shù)據(jù),而不需要等待傳感器返回對(duì)前一個(gè)分片消息的響應(yīng)消息。可選地,根據(jù)本發(fā)明的一種優(yōu)選實(shí)施例,網(wǎng)關(guān)和傳感器在消息交互中,增加認(rèn)證信息。認(rèn)證消息的配置和交互方式可以采用參照?qǐng)D2所述的相同方式。
為了提高傳輸效率,節(jié)省數(shù)據(jù)流量,根據(jù)本發(fā)明另一種優(yōu)選實(shí)施例,如前面針對(duì)<get>方法所述地那樣,在使用<put>/<post>方法的請(qǐng)求中,當(dāng)num為0是,不再是發(fā)送第一個(gè)分片數(shù)據(jù),而是告知傳感器推薦的分片的容量和分片總數(shù)。傳感器可以返回響應(yīng)告知網(wǎng)關(guān)是否繼續(xù)發(fā)送數(shù)據(jù)。傳感器在響應(yīng)中,使用num字段返回總的分片數(shù),使用szx字段返回傳感器確定的分片容量。并且網(wǎng)關(guān)和傳感器雙方存儲(chǔ)所確定的分片容量,用于之后的分片數(shù)據(jù)傳輸消息。除了最后一個(gè)分片數(shù)據(jù)之外。網(wǎng)關(guān)在后續(xù)<put>/<post>方法的請(qǐng)求中,只發(fā)送所請(qǐng)求的當(dāng)前分片序號(hào),而不發(fā)送已經(jīng)確定并保持不變的分片容量,而且傳感器在響應(yīng)消息中,也只發(fā)送當(dāng)前的分片序號(hào)和與該分片序號(hào)對(duì)應(yīng)的分片數(shù)據(jù),不再發(fā)送分片容量。在這種情況下,num為1時(shí),表示請(qǐng)求第一個(gè)分片的分片數(shù)據(jù),依次類(lèi)推。
在此情況下,分片選項(xiàng)的設(shè)計(jì)以及使用方式均類(lèi)似于圖3所示,以下參照?qǐng)D3來(lái)說(shuō)明。在<put>/<post>請(qǐng)求中,num字段為0,szx字段是第二個(gè)字節(jié),表示推薦的分片容量,totalnumber表示待發(fā)送的分片總數(shù)數(shù);在<put>/<post>響應(yīng)中,num字段為0,szx字段表示傳感器確定的分片容量,totalnumber沒(méi)用,不需要攜帶;如果網(wǎng)關(guān)接收到的szx字段與發(fā)送的不一致,需要用新的szx再次發(fā)送<put>/<post>請(qǐng)求,并攜帶重新計(jì)算的分片總數(shù),傳感器再發(fā)回響應(yīng)。以后<put>/<post>請(qǐng)求和響應(yīng)中,不再攜帶szx字段。
通過(guò)對(duì)分片選項(xiàng)重新設(shè)計(jì),可以在每個(gè)請(qǐng)求或響應(yīng)中至少減少發(fā)送4個(gè)比特位,在分片較多的情況下,可以極大地提高傳輸效率,節(jié)省傳輸資源,同時(shí)也提高了網(wǎng)關(guān)和傳感器雙方的處理效率。
另外,現(xiàn)有技術(shù)在每次分片傳輸?shù)恼?qǐng)求中,都需要攜帶所請(qǐng)求資源的統(tǒng)一資源標(biāo)識(shí)(uri,unifiedresourceidentifier),通常uri都要占十幾到幾十個(gè)字節(jié),重復(fù)的傳輸會(huì)浪費(fèi)傳輸資源,本發(fā)明設(shè)計(jì)使用token(令牌)來(lái)關(guān)聯(lián)分片傳輸?shù)亩鄠€(gè)請(qǐng)求,只在第一個(gè)分片消息中傳送uri,在后續(xù)的分片傳輸請(qǐng)求中,只需要攜帶token即可,由于token通常是1~8個(gè)字節(jié),因此可以節(jié)省一定的流量。
圖9是本發(fā)明一種通過(guò)分片傳輸數(shù)據(jù)資源的客戶(hù)端設(shè)備的實(shí)施例。圖9所示客戶(hù)端設(shè)備900包括:獲取單元910,用于獲取數(shù)據(jù)資源容量信息;發(fā)送單元920,用于發(fā)送攜帶分片選項(xiàng)的請(qǐng)求消息,其中所述分片選項(xiàng)包括推薦的分片容量,接收單元930,接收攜帶分片選項(xiàng)的響應(yīng)消息,其中所述分片選項(xiàng)包括確定的分片容量;和傳輸單元940,用于根據(jù)所述確定的分片容量以及所述數(shù)據(jù)資源容量信息,分片傳輸所述數(shù)據(jù)資源。
根據(jù)本發(fā)明的一種優(yōu)選實(shí)施例,所述客戶(hù)端設(shè)備可以進(jìn)一步包括存儲(chǔ)單元950,用于保存所述確定的分片容量。以便在數(shù)據(jù)資源傳輸過(guò)程中,不需要每次均發(fā)送szx字段。
根據(jù)本發(fā)明的另一種優(yōu)選實(shí)施例,所述客戶(hù)端設(shè)備可以進(jìn)一步包括認(rèn)證單元960,用于發(fā)送和接收認(rèn)證信息。
圖10是本發(fā)明一種通過(guò)分片傳輸數(shù)據(jù)資源的服務(wù)器設(shè)備的實(shí)施例。圖10所示服務(wù)器設(shè)備1000包括:接收單元1010,用于接收攜帶分片選項(xiàng)的請(qǐng)求消息,其中所述分片選項(xiàng)包括推薦的分片容量;發(fā)送單元1020,用于發(fā)送攜帶分片選項(xiàng)的響應(yīng)消息,其中所述分片選項(xiàng)包括確定的分片容量;和傳輸單元1030,用于根據(jù)所述確定的分片容量,分片傳輸所述數(shù)據(jù)資源。
根據(jù)本發(fā)明一種實(shí)施例,發(fā)送單元1020還用于發(fā)送攜帶數(shù)據(jù)資源容量信息的消息,以便于傳輸單元1030根據(jù)所述確定的分片容量和所述數(shù)據(jù)資源容量信息,分片傳輸所述數(shù)據(jù)資源。
根據(jù)本發(fā)明一種實(shí)施例,在接收到一次請(qǐng)求時(shí),傳輸單元1030可以主動(dòng)地分片傳輸數(shù)據(jù),而不需要客戶(hù)端設(shè)備針對(duì)每個(gè)分片數(shù)據(jù)進(jìn)行請(qǐng)求。
根據(jù)本發(fā)明一種優(yōu)選實(shí)施例,所述服務(wù)器設(shè)備可以進(jìn)一步包括存儲(chǔ)單元1040,用于保存所述確定的分片容量。以便在數(shù)據(jù)資源傳輸過(guò)程中,不需要每次均發(fā)送szx字段。
根據(jù)本發(fā)明的另一種優(yōu)選實(shí)施例,所述服務(wù)器設(shè)備可以進(jìn)一步包括認(rèn)證單元1050,用于發(fā)送和接收認(rèn)證信息。
根據(jù)本發(fā)明實(shí)施例,網(wǎng)關(guān)可以獲知目標(biāo)資源的容量信息,用于決策是否用分片的方式來(lái)獲取資源,這樣避免了出錯(cuò)的可能性,也可以實(shí)現(xiàn)并發(fā)地請(qǐng)求分片,提高數(shù)據(jù)請(qǐng)求的效率,而且得知資源的容量也便于分配存儲(chǔ)空間,計(jì)算分片的數(shù)量。
通過(guò)對(duì)分片選項(xiàng)重新設(shè)計(jì),可以在每個(gè)請(qǐng)求或響應(yīng)中至少少發(fā)送4個(gè)比特位,在分片較多的情況下,可以極大地提高傳輸效率,節(jié)省傳輸資源,同時(shí)也提高了雙方的處理效率。
在現(xiàn)有技術(shù)中,在收到來(lái)自于客戶(hù)端的請(qǐng)求后,服務(wù)器可以立即發(fā)回響應(yīng),也可以先發(fā)回一個(gè)ack(acknowledgement)響應(yīng)消息,表明接收到了請(qǐng)求消息,正在處理中,后續(xù)等處理完后,再發(fā)送響應(yīng)消息,即推遲的響應(yīng)。另外,客戶(hù)端可以訂閱一個(gè)資源的改變,服務(wù)器在接受客戶(hù)端對(duì)某個(gè)資源的訂閱后,一旦資源信息發(fā)生變化,就向客戶(hù)端發(fā)回通知消息。
現(xiàn)有技術(shù)不能滿(mǎn)足如下的需求:
1、客戶(hù)端在請(qǐng)求中指示服務(wù)器,自己需要哪種方式的響應(yīng);
2、客戶(hù)端要求服務(wù)器在某個(gè)規(guī)定的時(shí)間內(nèi)發(fā)回響應(yīng);
3、在通知消息的傳送過(guò)程中,由于網(wǎng)絡(luò)傳輸能力不穩(wěn)定,可能服務(wù)器先發(fā)出的通知消息,比服務(wù)器后發(fā)出的消息,到達(dá)客戶(hù)端的時(shí)間要晚。這樣,客戶(hù)端后收到的資源信息實(shí)際上是陳舊的信息,客戶(hù)端需要有一種機(jī)制能夠探測(cè)多個(gè)通知消息的順序。
圖11是本發(fā)明一種實(shí)施例的流程圖。在圖11所示實(shí)施例中,在s1110,客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求消息,該請(qǐng)求消息攜帶響應(yīng)方式選項(xiàng),所述響應(yīng)方式選項(xiàng)可以是推遲響應(yīng)(deferredresponse)選項(xiàng)或者是令牌(token)選項(xiàng),用來(lái)指示服務(wù)器,客戶(hù)端是否接收推遲的響應(yīng)。例如,所述響應(yīng)方式選項(xiàng)表示:一次性的立即響應(yīng)、推遲的一次性的響應(yīng)、推遲的多個(gè)響應(yīng)和取消推遲的多個(gè)響應(yīng)。如果響應(yīng)方式選項(xiàng)不攜帶,默認(rèn)為一次性響應(yīng),服務(wù)器可以確定是采用一次性的立即響應(yīng)或是推遲的一次性響應(yīng)。然后,在s1120,客戶(hù)端可以接收服務(wù)器發(fā)送的根據(jù)響應(yīng)方式選項(xiàng)生成的響應(yīng)消息。
在現(xiàn)有技術(shù)中,在收到來(lái)自于客戶(hù)端的請(qǐng)求后,服務(wù)器可以立即發(fā)回響應(yīng),也可以先發(fā)回一個(gè)ack,表明接收到了請(qǐng)求消息,正在處理中,后續(xù)等處理完后,再發(fā)送響應(yīng)消息,即推遲的響應(yīng)。另外,客戶(hù)端可以訂閱一個(gè)資源的改變,服務(wù)器在接受客戶(hù)端對(duì)某個(gè)資源的訂閱后,一旦資源信息發(fā)生變化,就向客戶(hù)端發(fā)回通知消息。
在本發(fā)明的一種實(shí)施例中,例如可以采用一個(gè)字節(jié)的延遲(deferred)選項(xiàng)來(lái)指示響應(yīng)方式,其中,可以使用前兩個(gè)比特位(bit)來(lái)表示,用c來(lái)表示:
c=00:表示一次性的立即響應(yīng);
c=01:表示推遲的一次性的響應(yīng);
c=10:表示推遲的多個(gè)響應(yīng),即訂閱;
c=11:表示取消推遲的多個(gè)響應(yīng),即取消訂閱。
對(duì)于客戶(hù)端發(fā)起的關(guān)于某個(gè)資源的訂閱,可以由客戶(hù)端取消訂閱,也可以服務(wù)器取消訂閱,比如服務(wù)器發(fā)回給客戶(hù)端一個(gè)需要確認(rèn)的響應(yīng)消息,客戶(hù)端在預(yù)定的時(shí)間內(nèi)未能確認(rèn),則服務(wù)器可以認(rèn)為客戶(hù)端失去連接,從而取消訂閱。
由于一個(gè)字節(jié)是8個(gè)比特位,多余的后6個(gè)比特位(假設(shè)其值為t)可以用于表示推遲的一次性的響應(yīng)的推遲時(shí)間或者推遲的多個(gè)響應(yīng)的截止時(shí)間,即超過(guò)此時(shí)間后,自動(dòng)取消訂閱。當(dāng)c為01時(shí),t表示推遲的一次性響應(yīng)的推遲時(shí)間;當(dāng)c為10時(shí),t表示推遲的多個(gè)響應(yīng)的截止時(shí)間;當(dāng)t為00或11時(shí),t沒(méi)有意義,置為0。
對(duì)于這6個(gè)比特位,可以表示0~63之間的數(shù)值,假設(shè)為t,可以用2的t次方,來(lái)表明這個(gè)時(shí)間長(zhǎng)度,以秒為單位,即可以表示1~2^63秒。比如:
0:2^0=1秒;
1:2^1=2秒;
2:2^2=4秒;
3:2^3=8秒
4:2^4=16秒;
…
63:2^63秒。
在現(xiàn)有技術(shù)中,max_age字段用于表明某個(gè)響應(yīng)可以被緩存的最大時(shí)間,即表明響應(yīng)的新鮮度。本發(fā)明擴(kuò)展這一字段的含義,可以在請(qǐng)求中用max_age字段表示多個(gè)響應(yīng)之間的時(shí)間間隔的限制,比如多個(gè)通知消息不得高于此時(shí)間間隔,或者是不得低于此時(shí)間間隔。
對(duì)于多個(gè)響應(yīng)的順序,可以用消息標(biāo)識(shí)(messageid)來(lái)區(qū)分。比如,規(guī)定消息標(biāo)識(shí)必須根據(jù)通響應(yīng)的順序來(lái)遞增地生成,接收方根據(jù)消息標(biāo)識(shí)的大小來(lái)判斷響應(yīng)的先后順序。
根據(jù)本發(fā)明的另一種實(shí)施例,可以使用token(令牌)選項(xiàng)來(lái)指示響應(yīng)方式,如果token值為0,來(lái)表示立即的響應(yīng),如果token值不為0,則表示可以接受推遲的響應(yīng)。
根據(jù)本發(fā)明的另一種實(shí)施例,可以替代地或另外增加時(shí)間戳(timestamp)選項(xiàng),與延遲選項(xiàng)單獨(dú)或者相結(jié)合地來(lái)指示響應(yīng)方式。具體來(lái)說(shuō),客戶(hù)端可以在請(qǐng)求中攜帶時(shí)間戳選項(xiàng),所述時(shí)間戳選項(xiàng)包括一個(gè)截止時(shí)間的值,要求服務(wù)器在指定的時(shí)間內(nèi)返回響應(yīng);服務(wù)器在響應(yīng)消息中,攜帶時(shí)間戳選項(xiàng),表明響應(yīng)消息生成的時(shí)間,這樣,客戶(hù)端可以基于時(shí)間戳選項(xiàng)來(lái)判斷響應(yīng)消息的順序。
在本發(fā)明一種實(shí)施例中,所述時(shí)間戳選項(xiàng)的設(shè)計(jì)方案可以用1~6個(gè)字節(jié)來(lái)表示,如果表示的時(shí)間短,則用一個(gè)字節(jié),如果時(shí)間長(zhǎng),則用3個(gè)字節(jié)或6個(gè)字節(jié)。具體表示方法例如以下兩種:
(1)用年、月、日、時(shí)、分、秒來(lái)表示,第一個(gè)字節(jié)表示年、第二個(gè)字節(jié)表示月,第三個(gè)字節(jié)表示日,第四個(gè)字節(jié)表示小時(shí),第五個(gè)字節(jié)表示分鐘,第六個(gè)字節(jié)表示秒,對(duì)于年份,例如可以以2000年為基礎(chǔ),其值表明2000年之后的第幾年,比如為0時(shí),表明是2000年,為1時(shí),表明是2001年,最多可以表示2063年。
(2)三個(gè)字節(jié)全部用秒來(lái)表示,最大可表示2^24-1秒,大約是136年。
由此,客戶(hù)端可以知道返回的響應(yīng)消息的順序,避免數(shù)據(jù)傳輸延遲導(dǎo)致的錯(cuò)誤。
與圖11所示的實(shí)施例對(duì)應(yīng),圖12是從服務(wù)器側(cè)來(lái)看,本發(fā)明實(shí)施例的方法的流程圖。本發(fā)明實(shí)施例的方法包括:
s1210:接收客戶(hù)端發(fā)送的攜帶響應(yīng)方式選項(xiàng)的請(qǐng)求消息;
s1220:向客戶(hù)端發(fā)送根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息。
下面結(jié)合具體的實(shí)施例進(jìn)一步闡述本發(fā)明實(shí)施例的方案。
實(shí)施例1:
在步驟s1110中發(fā)送的所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的一次性的響應(yīng)或者一次性的立即響應(yīng),并且所述請(qǐng)求消息還攜帶消息類(lèi)型指示信息和延遲時(shí)間選項(xiàng)。這里的消息類(lèi)型指示信息指示所述請(qǐng)求消息為多播請(qǐng)求,并且延遲時(shí)間選項(xiàng)用于指示多個(gè)服務(wù)器在所述延遲時(shí)間選項(xiàng)所指示的時(shí)間內(nèi),任意選擇一個(gè)時(shí)間向客戶(hù)端發(fā)送響應(yīng)消息,以避免多個(gè)服務(wù)器同時(shí)發(fā)回響應(yīng)給客戶(hù)端,造成網(wǎng)絡(luò)擁塞,而且客戶(hù)端也來(lái)不及處理。例如,在所述延遲時(shí)間選項(xiàng)所指示的時(shí)間內(nèi),多個(gè)服務(wù)器各自經(jīng)過(guò)隨機(jī)延時(shí)后,再向客戶(hù)端發(fā)送響應(yīng)消息。
例如,某個(gè)大樓管理員利用控制臺(tái)(多播網(wǎng)關(guān))發(fā)送向整個(gè)大樓的多個(gè)電燈控制器(服務(wù)器)發(fā)送開(kāi)燈的指令(多播請(qǐng)求),要求各個(gè)電燈控制器在5秒鐘內(nèi)發(fā)回響應(yīng)以表明是否已經(jīng)開(kāi)燈,則各個(gè)電燈控制器在5秒鐘內(nèi)分別經(jīng)過(guò)隨機(jī)延時(shí)后,向控制臺(tái)發(fā)回響應(yīng),表明是否已經(jīng)開(kāi)燈。
為了通知服務(wù)器所述請(qǐng)求消息為多播請(qǐng)求,這里所述的消息類(lèi)型指示信息例如可以是預(yù)設(shè)的用于發(fā)送多播請(qǐng)求的套接字端口;或者預(yù)設(shè)的用于發(fā)送所述多播請(qǐng)求的網(wǎng)絡(luò)協(xié)議ip地址;或者預(yù)設(shè)的用于發(fā)送多播請(qǐng)求的端口號(hào);或者所述請(qǐng)求消息中的消息類(lèi)型指示選項(xiàng)。例如,
1)服務(wù)器打開(kāi)一個(gè)特定的套接字(socket)端口,并設(shè)置為網(wǎng)絡(luò)協(xié)議(internetprotocol,簡(jiǎn)稱(chēng)ip)多播接收,則客戶(hù)端通過(guò)該特定的socket端口向服務(wù)器發(fā)送所述請(qǐng)求消息,以表示所述請(qǐng)求消息為多播請(qǐng)求;
2)客戶(hù)端在所述請(qǐng)求消息中攜帶預(yù)設(shè)的ip地址,例如ff00::/8的ipv6的前綴,服務(wù)器接收到請(qǐng)求消息后,檢查接收包的ip地址,如果該ip地址為預(yù)設(shè)的ip地址,則表示該請(qǐng)求消息是多播請(qǐng)求,否則是單播請(qǐng)求;
3)客戶(hù)端通過(guò)預(yù)設(shè)的用于發(fā)送多播請(qǐng)求的端口號(hào)來(lái)發(fā)送所述請(qǐng)求消息,例如:coap://用于單播請(qǐng)求,coapm://用于多播請(qǐng)求,則服務(wù)器可以根據(jù)接收的請(qǐng)求消息的端口號(hào)來(lái)確定所述請(qǐng)求消息是單播請(qǐng)求還是多播請(qǐng)求。
4)客戶(hù)端在請(qǐng)求消息中用消息類(lèi)型指示選項(xiàng)字段來(lái)表明此請(qǐng)求是單播請(qǐng)求還是多播請(qǐng)求,服務(wù)器根據(jù)此字段來(lái)判斷。
根據(jù)本發(fā)明實(shí)施例,上述過(guò)程也適用于所述請(qǐng)求消息為單播請(qǐng)求的場(chǎng)景。
服務(wù)器的行為在單播和多播場(chǎng)景下有所不同,主要區(qū)別是,對(duì)于單播請(qǐng)求,超時(shí)后,服務(wù)器放棄發(fā)回響應(yīng)給客戶(hù)端;對(duì)于多播請(qǐng)求,超時(shí)后,服務(wù)器還是會(huì)發(fā)回響應(yīng)給客戶(hù)端,雖然響應(yīng)超時(shí)了,但由于不是所有的服務(wù)器都超時(shí),所以不會(huì)造成擁塞問(wèn)題。
根據(jù)本發(fā)明實(shí)施例,所述請(qǐng)求消息還包括截止時(shí)間選項(xiàng),以指示服務(wù)器在該截止時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)返回響應(yīng)消息。由此,客戶(hù)端可以在所述截止時(shí)間選項(xiàng)指示的時(shí)間超時(shí)之前,接收服務(wù)器發(fā)送的響應(yīng)消息。
實(shí)施例2:
在步驟s1110中發(fā)送的請(qǐng)求消息中,響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),即表示客戶(hù)端訂閱(observe)服務(wù)器的數(shù)據(jù)。在這種情況下,服務(wù)器向客戶(hù)端發(fā)送通知響應(yīng)消息。根據(jù)本發(fā)明實(shí)施例,通知響應(yīng)消息攜帶最長(zhǎng)存續(xù)時(shí)間(max-age)選項(xiàng)和留候時(shí)間(patience)選項(xiàng),其中max-age選項(xiàng)用于表明資源的值的最長(zhǎng)有效時(shí)間;所述patience選項(xiàng)用于指示服務(wù)器將在max-age過(guò)期后,在所述patience選項(xiàng)所指示的時(shí)間內(nèi)作出響應(yīng)。在資源的值沒(méi)有改變的情況下,服務(wù)器可以用此patience選項(xiàng),來(lái)延遲響應(yīng)消息的發(fā)送。在這種情況下,客戶(hù)端可以用此來(lái)判斷,在max-age過(guò)期后,服務(wù)器將盡量在patience時(shí)間到期前,發(fā)送通知響應(yīng)給客戶(hù)端。因此,客戶(hù)端可以在max-age過(guò)期后,繼續(xù)保持與所述服務(wù)器的訂閱關(guān)系,保持時(shí)間為所述patience選項(xiàng)所指示的時(shí)間。這樣可以避免客戶(hù)端在max-age過(guò)期后,重新向服務(wù)器發(fā)送請(qǐng)求消息。
實(shí)施例3:
在步驟s1110中發(fā)送的所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),表示客戶(hù)端訂閱(observe)服務(wù)器的數(shù)據(jù)。在這種情況下,客戶(hù)端向服務(wù)器發(fā)送的所述請(qǐng)求消息中包括保持時(shí)間(keepalive)選項(xiàng)??蛻?hù)端可以根據(jù)情況設(shè)置keepalive選項(xiàng)的取值,比如在本例中可以設(shè)置為1000秒。服務(wù)器收到該請(qǐng)求消息后,向客戶(hù)端回復(fù)確認(rèn)(acknowledgement,簡(jiǎn)稱(chēng)ack)消息,其中攜帶當(dāng)前訂閱資源的最新取值,同時(shí)獲取keepalive選項(xiàng),并在此時(shí)開(kāi)啟一個(gè)定時(shí)器,其值為keepalive設(shè)置的取值。
在keepalive選項(xiàng)所述指示的時(shí)間內(nèi),如果客戶(hù)端訂閱的資源在服務(wù)器上發(fā)生變化,則服務(wù)器向客戶(hù)端發(fā)送第三通知響應(yīng),即客戶(hù)端接收服務(wù)器發(fā)送的第三通知響應(yīng),該所述第三通知響應(yīng)為不需要確認(rèn)型消息。
當(dāng)按keep-alive指示的時(shí)間超時(shí)之后,服務(wù)器向客戶(hù)端發(fā)送第四通知響應(yīng),即客戶(hù)端接收服務(wù)器發(fā)送的第四通知響應(yīng),其中所述第四通知響應(yīng)為需要確認(rèn)型消息。然后服務(wù)器等待客戶(hù)端返回ack消息。當(dāng)服務(wù)器收到來(lái)自客戶(hù)端的ack消息后,則說(shuō)明客戶(hù)端運(yùn)行正常。然后可以重復(fù)上面的過(guò)程,服務(wù)器重新開(kāi)啟定時(shí)器,通過(guò)不需要確認(rèn)型消息向客戶(hù)端發(fā)送響應(yīng)消息。
如果在一定時(shí)間內(nèi)服務(wù)器沒(méi)有收到客戶(hù)端的ack消息,則服務(wù)器將重新發(fā)送上述第四通知響應(yīng)。如果重發(fā)次數(shù)到達(dá)預(yù)設(shè)的次數(shù)閾值時(shí),服務(wù)器還是沒(méi)有收到客戶(hù)端的返回的ack消息,則服務(wù)器停止重發(fā),同時(shí)也停止同客戶(hù)端的訂閱關(guān)系。
圖13是實(shí)施例3的實(shí)現(xiàn)過(guò)程的消息交互圖。圖13中的各個(gè)消息如下:
es1310:客戶(hù)端向服務(wù)器發(fā)送訂閱請(qǐng)求,其中攜帶keepalive選項(xiàng);
es1320:服務(wù)器向客戶(hù)端回復(fù)ack消息,其中攜帶當(dāng)前訂閱資源的最新取值,開(kāi)啟定時(shí)器;
es1330:當(dāng)服務(wù)器上訂閱的資源發(fā)生變化時(shí),該服務(wù)器向客戶(hù)端發(fā)送通知響應(yīng),該通知響應(yīng)為不需要確認(rèn)型消息;
es1340:當(dāng)定時(shí)器超時(shí)后,服務(wù)器采用需要確認(rèn)型消息發(fā)送通知響應(yīng),并等待客戶(hù)端返回的ack消息;
es1350:客戶(hù)端服務(wù)器返回一個(gè)ack消息;
es1360:服務(wù)器收到來(lái)自客戶(hù)端的ack消息,重新開(kāi)啟定時(shí)器;
es1370:當(dāng)服務(wù)器上訂閱的資源發(fā)生變化時(shí),該服務(wù)器向客戶(hù)端發(fā)送通知響應(yīng),該通知響應(yīng)為不需要確認(rèn)型消息;
es1380:當(dāng)定時(shí)器超時(shí)后,服務(wù)器采用需要確認(rèn)型消息發(fā)送通知響應(yīng),并等待客戶(hù)端返回的ack消息;
es1390:服務(wù)器在一定時(shí)間內(nèi)沒(méi)有收到客戶(hù)端的ack消息,服務(wù)器將重新發(fā)送上述通知響應(yīng),當(dāng)重發(fā)次數(shù)到達(dá)最大,服務(wù)器還是沒(méi)有收到客戶(hù)端的ack消息,則服務(wù)器停止重發(fā),同時(shí)也停止同客戶(hù)端的訂閱關(guān)系。
es1310至es1390的代碼例如為:
根據(jù)本發(fā)明實(shí)施例,keepalive選項(xiàng)可以定義為可選選項(xiàng),即如果coap服務(wù)器不支持該選項(xiàng),可以無(wú)視該選項(xiàng),按沒(méi)有該選項(xiàng)處理收到的請(qǐng)求。
根據(jù)本發(fā)明實(shí)施例,該keepalive選項(xiàng)的取值是整數(shù)型的,大小可以是變長(zhǎng)的。根據(jù)具體需要,其大小可以是4bit(比特),或8個(gè)bit,或12bit,甚至更大,本發(fā)明實(shí)施例并不限制其具體的取值范圍。
實(shí)施例4:
在實(shí)際應(yīng)用中,服務(wù)器因?yàn)閾砣仍蚨鴮?dǎo)致高負(fù)荷時(shí),根據(jù)服務(wù)器設(shè)備的配置策略,為了防止后續(xù)信令處理等操作導(dǎo)致服務(wù)器設(shè)備徹底癱瘓,服務(wù)器設(shè)備在此時(shí)間點(diǎn)上開(kāi)啟擁塞控制,即在接下來(lái)的一定時(shí)間內(nèi),不再處理收到的任何新的請(qǐng)求消息。
考慮本發(fā)明實(shí)施例在這種場(chǎng)景中的應(yīng)用。例如,在步驟s1110中,客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求消息,其中所述響應(yīng)方式選項(xiàng)為推遲的一次性的響應(yīng)或一次性的立即響應(yīng),且所述請(qǐng)求消息還包括消息類(lèi)型指示信息和截止時(shí)間選項(xiàng),其中所述消息類(lèi)型指示信息指示所述請(qǐng)求消息為單播請(qǐng)求,所述請(qǐng)求消息為需要確認(rèn)型消息。本領(lǐng)域技術(shù)人員可以理解,如果服務(wù)器收到的是不需要確認(rèn)型請(qǐng)求消息,則直接將消息忽略,不回復(fù)任何響應(yīng)。如果此時(shí)服務(wù)器發(fā)生擁塞并開(kāi)啟了擁塞控制,則在步驟s1120中,服務(wù)器向所述客戶(hù)端發(fā)送特定ack消息,其中所述特定的確認(rèn)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼例如為5.03“serviceunavailable”(服務(wù)不可用)響應(yīng)代碼,用于表示服務(wù)器在所述截止時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述請(qǐng)求消息的響應(yīng)?;蛘叻?wù)器可以先向所述客戶(hù)端發(fā)送ack消息,接著向所述客戶(hù)端發(fā)送響應(yīng)消息,其中所述響應(yīng)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述服務(wù)器在所述截止時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述請(qǐng)求消息的響應(yīng)。
延遲接入時(shí)間選項(xiàng)的值代表了延遲接入的具體時(shí)間,單位例如是秒,最大值例如為2n秒,超過(guò)該最大值的值例如被服務(wù)器按照默認(rèn)值2m秒來(lái)處理。如果此選項(xiàng)值為零時(shí)或者此選項(xiàng)沒(méi)有出現(xiàn)在響應(yīng)消息中時(shí),則客戶(hù)端無(wú)需執(zhí)行額外操作,可在任意時(shí)間嘗試向服務(wù)器再次發(fā)出請(qǐng)求。根據(jù)本發(fā)明實(shí)施例,延遲接入時(shí)間選項(xiàng)為可選類(lèi)型,即無(wú)法被coap客戶(hù)端識(shí)別時(shí)會(huì)直接被忽略。
圖14是實(shí)施例4的消息交互圖。如圖所示,
e1400:服務(wù)器開(kāi)啟擁塞控制;
e1402:客戶(hù)端向所述服務(wù)器發(fā)送需要確認(rèn)型請(qǐng)求消息;
e1404:服務(wù)器向客戶(hù)端發(fā)送ack消息,該ack消息包含延遲接入選項(xiàng)(新)、響應(yīng)代碼以及空的負(fù)載
e1404:客戶(hù)端立即清除緩存的等待向所述服務(wù)器發(fā)送的其他請(qǐng)求消息。
e1406:在延遲接入時(shí)間選項(xiàng)所指示的時(shí)間內(nèi),向服務(wù)器發(fā)送請(qǐng)求消息;
e1408:服務(wù)器將該請(qǐng)求消息忽略;
e1410:等待延遲接入時(shí)間選項(xiàng)所指示的時(shí)間;
e1412:服務(wù)器負(fù)荷恢復(fù)正常;
e1414:客戶(hù)端向服務(wù)器重新發(fā)送所述請(qǐng)求消息;
e1416:服務(wù)器返回正常ack消息。
由于coap協(xié)議的版本不同,實(shí)際投入使用的coap客戶(hù)端可能沒(méi)有及時(shí)升級(jí),以至于無(wú)法識(shí)別所述延遲接入選項(xiàng)。因此即使在e1404,帶有延遲接入時(shí)間選項(xiàng)的ack發(fā)送到了客戶(hù)端,由于客戶(hù)端版本較老無(wú)法識(shí)別延遲接入時(shí)間選項(xiàng),該客戶(hù)端設(shè)備將會(huì)忽略該選項(xiàng)(也有可能是其他異常情況導(dǎo)致),并且可能在接下來(lái)的任意時(shí)間,在e1406再次嘗試發(fā)送請(qǐng)求消息至已經(jīng)遭遇擁塞的服務(wù)器設(shè)備。服務(wù)器設(shè)備可以根據(jù)配置的策略,忽略該請(qǐng)求消息,或再次發(fā)送帶有新的延遲接入時(shí)間選項(xiàng)的響應(yīng)消息,該新的延遲接入時(shí)間選項(xiàng)的取值可以小于先前已經(jīng)發(fā)送的延遲接入時(shí)間選項(xiàng)的取值。
需要說(shuō)明的是,本實(shí)施例中為了方便解釋?zhuān)际褂昧藀iggy-backed(附帶式)的響應(yīng)消息,即各選項(xiàng)夾帶在ack消息中直接傳輸。根據(jù)本發(fā)明實(shí)施例,也可以使用分離式的響應(yīng),即確認(rèn)消息和響應(yīng)消息分兩次發(fā)送,延遲接入選項(xiàng)總是屬于響應(yīng)消息的一部分。
實(shí)施例5:
與服務(wù)器側(cè)發(fā)生擁塞類(lèi)似,客戶(hù)端也可能因?yàn)槟撤N原因發(fā)生擁塞而導(dǎo)致高負(fù)荷。當(dāng)客戶(hù)端由于擁塞等原因而導(dǎo)致高負(fù)荷時(shí),根據(jù)客戶(hù)端的配置策略,為了防止后續(xù)信令處理等操作導(dǎo)致客戶(hù)端徹底癱瘓,客戶(hù)端在此時(shí)間點(diǎn)上開(kāi)啟擁塞控制,即在接下來(lái)的一定時(shí)間內(nèi),不再處理收到的任何新的請(qǐng)求消息。
考慮本發(fā)明實(shí)施例在這種場(chǎng)景中的應(yīng)用。例如,在步驟s1110中,客戶(hù)端向服務(wù)器發(fā)送所述請(qǐng)求消息,其中所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),即客戶(hù)端訂閱服務(wù)器上的資源信息。然后,在步驟s1120中,客戶(hù)端收到服務(wù)器發(fā)送的響應(yīng)消息,例如在所訂閱的資源在服務(wù)器上發(fā)生了變化的情況下,服務(wù)器向客戶(hù)端發(fā)送需要確認(rèn)型響應(yīng)消息,其中攜帶最新的資源信息。如果此時(shí)客戶(hù)端開(kāi)啟了擁塞控制,則會(huì)向服務(wù)器發(fā)送特定的ack消息,所述特定的確認(rèn)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述客戶(hù)端在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述響應(yīng)消息的確認(rèn)。或者客戶(hù)端可以先向所述服務(wù)器發(fā)送ack消息,接著向所述客戶(hù)端發(fā)送特定的響應(yīng)消息,其中所述特定的響應(yīng)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述客戶(hù)端在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述需要確認(rèn)型響應(yīng)消息的確認(rèn)。在客戶(hù)端開(kāi)啟擁塞控制的情況下,如果在步驟s1120中客戶(hù)端接收到的是不需要確認(rèn)型響應(yīng)消息,則客戶(hù)端將該消息直接忽略,不回復(fù)任何確認(rèn)消息。
如上所述,延遲接入時(shí)間選項(xiàng)的值代表了延遲接入的具體時(shí)間,單位例如是秒,最大值例如為2n秒,超過(guò)該最大值的值例如被客戶(hù)端按照默認(rèn)值2m秒來(lái)處理。如果此選項(xiàng)值為零時(shí)或者此選項(xiàng)沒(méi)有出現(xiàn)在響應(yīng)消息中時(shí),則服務(wù)器無(wú)需執(zhí)行額外操作,可在任意時(shí)間嘗試向客戶(hù)端再次發(fā)出需要確認(rèn)形響應(yīng)消息。根據(jù)本發(fā)明實(shí)施例,延遲接入時(shí)間選項(xiàng)為可選類(lèi)型,即無(wú)法被coap服務(wù)器識(shí)別時(shí)會(huì)直接被忽略。
服務(wù)器收到上述特定的ack消息后,如果能夠識(shí)別消息中的延遲接入時(shí)間選項(xiàng),則暫停所有的與所述客戶(hù)端之間的訂閱推送,開(kāi)始等待,即等待所述客戶(hù)端恢復(fù)正常。
在延遲接入時(shí)間選項(xiàng)所指示的時(shí)間經(jīng)過(guò)之后,客戶(hù)端恢復(fù)正常,服務(wù)器的等待計(jì)時(shí)也已結(jié)束,因此服務(wù)器向客戶(hù)端設(shè)備重發(fā)需要確認(rèn)的響應(yīng)消息,負(fù)載恢復(fù)正常的客戶(hù)端此時(shí)會(huì)回復(fù)一個(gè)正常的確認(rèn)消息。
圖15是實(shí)施例5中的消息交互圖。如圖16所示,
es1500:客戶(hù)端向服務(wù)器發(fā)送訂閱請(qǐng)求;
es1502:服務(wù)器向客戶(hù)端發(fā)送需要確認(rèn)的響應(yīng)消息;
es1504:客戶(hù)端向服務(wù)器發(fā)送ack消息;
es1506:客戶(hù)端開(kāi)啟擁塞控制;
es1508:服務(wù)器向客戶(hù)端發(fā)送需要確認(rèn)的響應(yīng)消息;
es1510:客戶(hù)端向服務(wù)器發(fā)送攜帶相應(yīng)代碼和延遲接入時(shí)間選項(xiàng)的特定的ack消息;
es1512:服務(wù)器暫停向服務(wù)器推送訂閱的資源;
es1514:服務(wù)器等待延遲接入時(shí)間選項(xiàng)所指示的時(shí)間;
es1516:客戶(hù)端負(fù)荷恢復(fù)正常;
es1518:服務(wù)器向客戶(hù)端重新發(fā)送需要確認(rèn)的響應(yīng)消息;
es1520:客戶(hù)端向服務(wù)器發(fā)送ack消息。
值得說(shuō)明的是,正常情況下,客戶(hù)端設(shè)備收到服務(wù)器設(shè)備推送的需要確認(rèn)的請(qǐng)求消息后,都回復(fù)的是ack確認(rèn)消息,只有當(dāng)客戶(hù)端需要向服務(wù)器通知延遲接入時(shí)才會(huì)用piggybacked的方式攜帶具體響應(yīng)內(nèi)容或者分開(kāi)傳送ack和響應(yīng)。
根據(jù)本發(fā)明實(shí)施例,通過(guò)在消息交互過(guò)程中指定響應(yīng)方式選項(xiàng),客戶(hù)端可以指定所需的響應(yīng),提高了coap的消息交互效率。
實(shí)施例6:
本實(shí)施例描述了服務(wù)器和客戶(hù)端進(jìn)行交互的流程:
1、客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求,其中攜帶超時(shí)選項(xiàng),并指示此請(qǐng)求是單播請(qǐng)求或是多播請(qǐng)求,是資源訂閱請(qǐng)求或是一次性請(qǐng)求;
2、服務(wù)器根據(jù)接收到的請(qǐng)求進(jìn)行判斷,如果該請(qǐng)求是一次性請(qǐng)求,則服務(wù)器繼續(xù)判斷是單播請(qǐng)求還是多播請(qǐng)求:
a.如果該請(qǐng)求是單播一次性請(qǐng)求,服務(wù)器預(yù)先判斷自己是否能夠在超時(shí)選項(xiàng)指定的時(shí)間內(nèi)完成客戶(hù)端的請(qǐng)求,如果預(yù)測(cè)不能完成,則發(fā)回一個(gè)狀態(tài)碼(比如5.04,timeout,超時(shí))給客戶(hù)端,表明不能在預(yù)定時(shí)間內(nèi)完成客戶(hù)端的請(qǐng)求;可選地,服務(wù)器預(yù)測(cè)自身空閑的時(shí)間,或是自身可以完成客戶(hù)端的請(qǐng)求的時(shí)間,并把這個(gè)預(yù)測(cè)時(shí)間在響應(yīng)中發(fā)回給客戶(hù)端,指示客戶(hù)端在指定的預(yù)測(cè)時(shí)間之后,再次發(fā)送請(qǐng)求;如果服務(wù)器能夠在指定的超時(shí)時(shí)間內(nèi)完成請(qǐng)求,則在超時(shí)時(shí)間過(guò)期前,發(fā)回響應(yīng)。
b.如果該請(qǐng)求是多播一次性請(qǐng)求,服務(wù)器在指定的時(shí)間內(nèi)任意選擇一個(gè)時(shí)間,返回響應(yīng)給客戶(hù)端。
3、如果服務(wù)器判斷客戶(hù)端的請(qǐng)求是訂閱請(qǐng)求,服務(wù)器繼續(xù)判斷該請(qǐng)求中攜帶的超時(shí)時(shí)間是patience選項(xiàng),還是keep-alive選項(xiàng):
a.如果請(qǐng)求中攜帶的是patience選項(xiàng),則表明服務(wù)器需要在指定時(shí)間內(nèi)發(fā)回第一個(gè)通知消息;服務(wù)器在通知消息中攜帶資源的信息,以及max-age選項(xiàng)和patience時(shí)間選項(xiàng),要求客戶(hù)端在指定時(shí)間內(nèi)保持與服務(wù)器資源的訂閱狀態(tài)。
b.如果請(qǐng)求中攜帶的是keep-alive時(shí)間選項(xiàng),服務(wù)器在keep-alive時(shí)間內(nèi),使用non-confirmable消息的方式,給客戶(hù)端發(fā)送通知消息;在keep-alive時(shí)間過(guò)期后,使用confirmable消息的方式,給客戶(hù)端發(fā)送通知消息。
圖16是根據(jù)本發(fā)明的一種傳輸數(shù)據(jù)資源的客戶(hù)端設(shè)備的實(shí)施例的框圖,其中所述客戶(hù)端設(shè)備1600包括:發(fā)送模塊1610,用于發(fā)送攜帶響應(yīng)方式選項(xiàng)的請(qǐng)求消息;和接收模塊1620,用于接收根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息。
參照?qǐng)D11所述的本發(fā)明的實(shí)施例所描述的過(guò)程和特征均適用于圖16所示的客戶(hù)端設(shè)備。具體來(lái)說(shuō),例如,發(fā)送模塊1610發(fā)送的請(qǐng)求消息中攜帶的響應(yīng)方式選項(xiàng)可以是推遲選項(xiàng),例如可以為:一次性的立即響應(yīng)、推遲的一次性的響應(yīng)、推遲的多個(gè)響應(yīng)和取消推遲的多個(gè)響應(yīng)。
根據(jù)一種實(shí)施例,發(fā)送模塊1610發(fā)送的請(qǐng)求消息中攜帶的響應(yīng)方式選項(xiàng)可以表示推遲的一次性的響應(yīng)的推遲時(shí)間或者推遲的多個(gè)響應(yīng)的截止時(shí)間。
根據(jù)一種實(shí)施例,發(fā)送模塊1610發(fā)送攜帶時(shí)間戳選項(xiàng)的請(qǐng)求消息,該時(shí)間戳表示接收響應(yīng)的截止時(shí)間;接收模塊1620接收攜帶時(shí)間戳選項(xiàng)的響應(yīng)消息,該時(shí)間戳表示響應(yīng)消息的生成時(shí)間。接收模塊1620根據(jù)接收到的響應(yīng)消息中的時(shí)間戳所表示的時(shí)間確定響應(yīng)消息的順序。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的一次性的響應(yīng)或一次性的立即響應(yīng),
所述請(qǐng)求消息還攜帶消息類(lèi)型指示信息和延遲時(shí)間選項(xiàng),其中所述消息類(lèi)型指示信息指示所述請(qǐng)求消息為多播請(qǐng)求或單播請(qǐng)求;
所述接收模塊1620用于在所述延遲時(shí)間選項(xiàng)指示的時(shí)間內(nèi),接收服務(wù)器發(fā)送的響應(yīng)消息。
根據(jù)本發(fā)明實(shí)施例,所述請(qǐng)求消息還包括截止時(shí)間選項(xiàng),
所述接收模塊1620用于在所述截止時(shí)間選項(xiàng)指示的時(shí)間超時(shí)之前,接收服務(wù)器發(fā)送的響應(yīng)消息。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),
所述接收模塊1620用于接收所述服務(wù)器發(fā)送的通知響應(yīng)消息,其中所述通知響應(yīng)消息攜帶最長(zhǎng)存續(xù)時(shí)間選項(xiàng)和留候時(shí)間選項(xiàng),其中所述留候時(shí)間選項(xiàng)用于指示,
在所述最長(zhǎng)存續(xù)時(shí)間選項(xiàng)所指示時(shí)間超時(shí)之后,所述客戶(hù)端保持與所述服務(wù)器的訂閱關(guān)系,保持時(shí)間為所述留候選項(xiàng)所指示的時(shí)間。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),所述請(qǐng)求消息還包括保持時(shí)間選項(xiàng),所述接收模塊1620用于在所述保持時(shí)間選項(xiàng)指示的時(shí)間內(nèi),接收服務(wù)器發(fā)送的第一通知響應(yīng),其中所述第一通知響應(yīng)為不需要確認(rèn)型消息;在所述保持時(shí)間選項(xiàng)指示的時(shí)間超時(shí)之后,所述接收模塊1620用于接收所述服務(wù)器發(fā)送的第二通知響應(yīng),其中所述第二通知響應(yīng)為需要確認(rèn)型消息,所述發(fā)送模塊1610用于向所述服務(wù)器發(fā)送確認(rèn)ack消息。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的一次性的響應(yīng)或一次性的立即響應(yīng),所述請(qǐng)求消息還包括消息類(lèi)型指示信息和截止時(shí)間選項(xiàng),其中所述消息類(lèi)型指示信息指示所述請(qǐng)求消息為單播請(qǐng)求,所述請(qǐng)求消息為需要確認(rèn)型消息;
所述接收模塊1620用于接收所述服務(wù)器發(fā)送的特定的確認(rèn)消息,其中所述特定的確認(rèn)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述服務(wù)器在所述截止時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述請(qǐng)求消息的響應(yīng);
或者
所述接收模塊1620用于接收所述服務(wù)器發(fā)送的確認(rèn)消息;
并用于接收所述服務(wù)器發(fā)送的特定的響應(yīng)消息,其中所述特定的響應(yīng)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述服務(wù)器在所述截止時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述請(qǐng)求消息的響應(yīng)。
根據(jù)本發(fā)明實(shí)施例,所述接收模塊1620還用于清除緩存的等待向所述服務(wù)器發(fā)送的其他請(qǐng)求消息。
根據(jù)本發(fā)明實(shí)施例,在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間之后,所述發(fā)送模塊1610還用于重新向所述服務(wù)器發(fā)送所述請(qǐng)求消息。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),所述接收服務(wù)器發(fā)送的根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息是需要確認(rèn)型消息,
所述發(fā)送模塊1610還用于向所述服務(wù)器發(fā)送特定的確認(rèn)消息,其中所述特定的確認(rèn)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示客戶(hù)端在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述響應(yīng)消息的確認(rèn);
或者
所述發(fā)送模塊1610用于向所述服務(wù)器發(fā)送確認(rèn)消息;
并用于向所述服務(wù)器發(fā)送特定的響應(yīng)消息,其中所述特定的響應(yīng)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述客戶(hù)端在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述響應(yīng)消息的確認(rèn)。
根據(jù)本發(fā)明實(shí)施例,所述響應(yīng)消息包括響應(yīng)消息生成時(shí)間,所述接收模塊1220還用于根據(jù)所述響應(yīng)消息生成時(shí)間確定響應(yīng)消息的順序。
圖17是根據(jù)本發(fā)明的一種傳輸數(shù)據(jù)資源的服務(wù)器設(shè)備的實(shí)施例,其中所述服務(wù)器設(shè)備1700包括:接收模塊1710,用于接收客戶(hù)端發(fā)送的攜帶響應(yīng)方式選項(xiàng)的請(qǐng)求消息;和發(fā)送模塊1720,向客戶(hù)端發(fā)送根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息。
參照?qǐng)D12所述的本發(fā)明的實(shí)施例所描述的過(guò)程和特征均適用于圖17所示的服務(wù)器設(shè)備。具體來(lái)說(shuō),例如,接收模塊1710接收的請(qǐng)求消息中攜帶的響應(yīng)方式選項(xiàng)可以是推遲選項(xiàng),例如可以為:一次性的立即響應(yīng)、推遲的一次性的響應(yīng)、推遲的多個(gè)響應(yīng)和取消推遲的多個(gè)響應(yīng)。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的一次性的響應(yīng)或一次性的立即響應(yīng),所述請(qǐng)求消息還包括消息類(lèi)型指示信息和延遲時(shí)間選項(xiàng),其中所述消息類(lèi)型指示信息指示所述請(qǐng)求消息為多播請(qǐng)求或單播請(qǐng)求;所述發(fā)送模塊1720用于在所述延遲時(shí)間選項(xiàng)指示的時(shí)間內(nèi),經(jīng)過(guò)隨機(jī)延時(shí)之后,向所述客戶(hù)端發(fā)送響應(yīng)消息。
根據(jù)本發(fā)明實(shí)施例,所述請(qǐng)求消息還包括截止時(shí)間選項(xiàng),所述發(fā)送模塊1720用于在所述截止時(shí)間選項(xiàng)指示的時(shí)間超時(shí)之前,向所述客戶(hù)端發(fā)送響應(yīng)消息。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),
所述發(fā)送模塊1720用于向所述客戶(hù)端發(fā)送通知響應(yīng),其中所述通知響應(yīng)攜帶最長(zhǎng)存續(xù)時(shí)間選項(xiàng)和留候時(shí)間選項(xiàng),其中所述留候時(shí)間選項(xiàng)用于指示,
在所述最長(zhǎng)存續(xù)時(shí)間選項(xiàng)所指示的時(shí)間超時(shí)之后,所述服務(wù)器將在所述留候時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)作出響應(yīng)。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),所述請(qǐng)求消息還包括保持時(shí)間選項(xiàng),所述發(fā)送模塊1720用于在所述保持時(shí)間選項(xiàng)指示的時(shí)間內(nèi),向所述客戶(hù)端發(fā)送第三通知響應(yīng),其中所述第三通知響應(yīng)為不需要確認(rèn)型消息;所述發(fā)送模塊1720還用于在所述保持時(shí)間選項(xiàng)指示的時(shí)間超時(shí)之后,向所述客戶(hù)端發(fā)送第四通知響應(yīng),其中所述第四通知響應(yīng)為需要確認(rèn)型消息;所述接收模塊1710用于接收所述客戶(hù)端發(fā)送的ack消息。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的一次性的響應(yīng)或一次性的立即響應(yīng),所述請(qǐng)求消息還包括消息類(lèi)型指示信息和截止時(shí)間選項(xiàng),其中所述消息類(lèi)型指示信息指示所述請(qǐng)求消息為單播請(qǐng)求,所述請(qǐng)求消息為需要確認(rèn)型消息;
所述發(fā)送模塊1720用于向客戶(hù)端發(fā)送特定的確認(rèn)消息,其中所述特定的確認(rèn)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述服務(wù)器在所述截止時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述請(qǐng)求消息的響應(yīng);
或者
所述發(fā)送模塊1720用于向客戶(hù)端發(fā)送確認(rèn)消息;
并用于向客戶(hù)端發(fā)送特定的響應(yīng)消息,其中所述特定的響應(yīng)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述服務(wù)器在所述截止時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述請(qǐng)求消息的響應(yīng)。
根據(jù)本發(fā)明實(shí)施例,在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間之后,所述接收模塊1710用于接收所述客戶(hù)端重新發(fā)送的所述請(qǐng)求消息。
根據(jù)本發(fā)明實(shí)施例,在所述請(qǐng)求消息中,所述響應(yīng)方式選項(xiàng)為推遲的多個(gè)響應(yīng),所述向客戶(hù)端發(fā)送的根據(jù)所述響應(yīng)方式選項(xiàng)生成的響應(yīng)消息是需要確認(rèn)型消息,所述接收模塊1710用于接收所述客戶(hù)端發(fā)送的特定的確認(rèn)消息,其中所述特定的確認(rèn)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述客戶(hù)端在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述響應(yīng)消息的確認(rèn);
或者
所述接收模塊1710用于接收所述客戶(hù)端發(fā)送的確認(rèn)消息;
并用于接收所述客戶(hù)端發(fā)送特定的響應(yīng)消息,其中所述特定的響應(yīng)消息攜帶響應(yīng)代碼和延遲接入時(shí)間選項(xiàng),其中所述響應(yīng)代碼表示所述客戶(hù)端在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間內(nèi)無(wú)法返回針對(duì)所述響應(yīng)消息的確認(rèn)。
根據(jù)本發(fā)明實(shí)施例,在所述延遲接入時(shí)間選項(xiàng)所指示的時(shí)間超時(shí)后,所述發(fā)送模塊1720用于向所述客戶(hù)端重新發(fā)送所述需要確認(rèn)型響應(yīng)消息。
根據(jù)本發(fā)明的另一種實(shí)施例,接收模塊1710接收的請(qǐng)求消息中可以攜帶時(shí)間戳選項(xiàng),該時(shí)間戳選項(xiàng)表示接收響應(yīng)的截止時(shí)間,而發(fā)送模塊1320發(fā)送的響應(yīng)消息中也可以攜帶時(shí)間戳選項(xiàng),所述時(shí)間戳選項(xiàng)表示響應(yīng)消息的生成時(shí)間。
本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來(lái)實(shí)現(xiàn),為了清楚地說(shuō)明硬件和軟件的可互換性,在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專(zhuān)業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開(kāi)的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(ram)、內(nèi)存、只讀存儲(chǔ)器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤(pán)、可移動(dòng)磁盤(pán)、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
盡管已示出和描述了本發(fā)明的一些實(shí)施例,但本領(lǐng)域技術(shù)人員應(yīng)理解,在不脫離本發(fā)明的原理和精神的情況下,可對(duì)這些實(shí)施例進(jìn)行各種修改,這樣的修改應(yīng)落入本發(fā)明的范圍內(nèi)。