本發(fā)明涉及機(jī)器通信(Machine-to-Machine Communications,M2M)技術(shù)領(lǐng)域,尤其涉及訂閱通知的實(shí)現(xiàn)方法和裝置。
背景技術(shù):
機(jī)器通信(Machine-to-Machine Communications,M2M)是一種以機(jī)器智能交互為核心的、網(wǎng)絡(luò)化的應(yīng)用與服務(wù)。它通過在機(jī)器內(nèi)部嵌入無線或有線通信模塊以及應(yīng)用處理邏輯,實(shí)現(xiàn)無需人工干預(yù)的數(shù)據(jù)通信,以滿足用戶對監(jiān)控、指揮調(diào)度、數(shù)據(jù)采集和測量等方面的信息化需求。
圖1是一種典型的M2M系統(tǒng)架構(gòu)。其中,各種終端(如傳感器)經(jīng)過網(wǎng)關(guān)遠(yuǎn)程接入到業(yè)務(wù)平臺,而各種裝載在終端上的應(yīng)用(如電力抄表、智能交通等)則通過業(yè)務(wù)平臺所提供的業(yè)務(wù)能力獲取其他終端采集的數(shù)據(jù)或?qū)ζ渌K端進(jìn)行遠(yuǎn)程的控制和管理。網(wǎng)關(guān)和平臺都是公共服務(wù)實(shí)體(Common Services Entity,CSE),終端上的應(yīng)用可以注冊到與該終端連接的網(wǎng)關(guān)上,所有網(wǎng)關(guān)均需要注冊到業(yè)務(wù)平臺上,該接收注冊的CSE稱為本地CSE,例如,圖1中應(yīng)用1的本地CSE是網(wǎng)關(guān)A,應(yīng)用2的本地CSE是網(wǎng)關(guān)B,網(wǎng)關(guān)A和B的本地CSE是業(yè)務(wù)平臺。注冊成功后,本地CSE將為注冊者創(chuàng)建注冊資源。
在某些M2M應(yīng)用場景中,終端b上應(yīng)用2希望持續(xù)了解另一終端a上的應(yīng)用1的狀態(tài)變化,但又不希望頻繁的去詢問應(yīng)用1。在目前的歐洲電信標(biāo)準(zhǔn)化協(xié)會(European Telecommunications Standards Institute,ETSI)所制定的M2M規(guī)范TS 102 690及TS 102 921中,提供了一種訂閱通知機(jī)制。即應(yīng)用2訂閱應(yīng)用1在其本地CSE(即網(wǎng)關(guān)A)上的注冊資源;當(dāng)應(yīng)用1產(chǎn)生改變時(shí),向其本地CSE、即網(wǎng)關(guān)A更新注冊資源狀態(tài),網(wǎng)關(guān)A根據(jù)所述注冊資源的狀態(tài)更新向應(yīng)用2發(fā)送通知消息。其中,應(yīng)用2稱為訂閱者,應(yīng)用1在其本地CSE上的注冊資源稱為被訂閱資源,該被訂閱資源所在的CSE稱為托管公共服務(wù)實(shí)體(Hosting CSE)。Hosting CSE將根據(jù)訂閱者(即應(yīng)用2)的訂閱請求創(chuàng)建訂閱資源,訂閱資源用于描述訂閱關(guān)系。訂閱資源的具體內(nèi)容可以包括:被訂閱資源標(biāo)識、通知發(fā)送地址;可選的,還包含訂閱條件等。同時(shí)在被訂閱資源中保存該被訂閱資源與訂閱資源之間的關(guān)聯(lián)關(guān)系。
上述場景中,網(wǎng)關(guān)A上報(bào)的通知消息經(jīng)過其他CSE轉(zhuǎn)發(fā)給網(wǎng)關(guān)B,這里以通知消息只經(jīng)過一個(gè)CSE(即業(yè)務(wù)平臺)轉(zhuǎn)發(fā)給網(wǎng)關(guān)B為例,為了減少業(yè)務(wù)平臺與網(wǎng)關(guān)B的連接開銷,業(yè)務(wù)平臺在接收到來自網(wǎng)關(guān)A的上報(bào)信息后,確定如果是非緊急消息,將其在本地緩存。當(dāng)接收到其他發(fā)送給網(wǎng)關(guān)B的緊急消息或緩存時(shí)間到期時(shí),業(yè)務(wù)平臺與網(wǎng)關(guān)B建立連接,將緩存的消息一并發(fā)送。這種接收到來自其他CSE的消息并在本地緩存一段時(shí)間后再轉(zhuǎn)發(fā)到另一CSE的機(jī)制稱為存儲轉(zhuǎn)發(fā)(Store and Forward,SAF)機(jī)制,在消息的發(fā)送過程中執(zhí)行存儲轉(zhuǎn)發(fā)機(jī)制的CSE稱為中間節(jié)點(diǎn),例如該場景中的業(yè)務(wù)平臺,消息在中間節(jié)點(diǎn)所緩存的時(shí)間稱為存儲轉(zhuǎn)發(fā)時(shí)延。
由于存儲轉(zhuǎn)發(fā)機(jī)制的存在,使得不同時(shí)間發(fā)送的多條通知消息可能在一個(gè)連接中到達(dá)訂閱者。例如:在上述的場景中,應(yīng)用1用于產(chǎn)生天氣信息,應(yīng)用2用于根據(jù)天氣為用戶提供生活提醒,需要實(shí)時(shí)了解天氣變化信息,因此訂閱應(yīng)用1,從而創(chuàng)建訂閱資源1。當(dāng)天氣信息發(fā)生更新時(shí),氣象部門網(wǎng)關(guān)A根據(jù)訂閱資源1向應(yīng)用2發(fā)送通知消息。由于關(guān)于天氣變化的通知屬于不緊急的通知消息,當(dāng)通知消息到達(dá)業(yè)務(wù)平臺時(shí),業(yè)務(wù)平臺根據(jù)存儲轉(zhuǎn)發(fā)策略緩存該通知消息。在通知消息的緩存期間,若天氣發(fā)生變化,業(yè)務(wù)平臺會接收網(wǎng)關(guān)A到根據(jù)訂閱資源1發(fā)送給應(yīng)用2的新通知消息?,F(xiàn)有訂閱通知機(jī)制中,這兩條通知消息可能在一個(gè)連接中達(dá)到應(yīng)用2,即訂閱者在一個(gè)連接中可能接收到根據(jù)同一個(gè)訂閱資源發(fā)送的多條通知消息。但是,對某些訂閱者,應(yīng)用2只關(guān)心最新的天氣信息,因此較早時(shí)間發(fā)送的通知消息無效,從而導(dǎo)致網(wǎng)絡(luò)資源和訂閱者計(jì)算資源浪費(fèi)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提供的訂閱通知的實(shí)現(xiàn)方法和裝置,能夠避免因?yàn)樵谝粋€(gè)連接中將多個(gè)根據(jù)同一訂閱資源發(fā)送的通知消息同時(shí)發(fā)送給訂閱者造成網(wǎng)絡(luò)資源和計(jì)算資源的浪費(fèi)。
第一方面,本發(fā)明實(shí)施例提供的實(shí)現(xiàn)訂閱通知的托管公共服務(wù)實(shí)體hosting CSE包括:接收單元,用于接收訂閱者的創(chuàng)建訂閱資源請求,所述創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識;資源創(chuàng)建單元,用于根據(jù)所述接收單元接收到的創(chuàng)建訂閱資源請求而創(chuàng)建訂閱資源;確定單元,用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);分配單元,用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);生成單元,用于當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述資源創(chuàng)建單元創(chuàng)建的訂閱資源生成通知消息,所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述分配單元分配的最新狀態(tài)標(biāo)識,以便于中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)向所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息;發(fā)送單元,用于將所述生成單元生成的通知消息發(fā)送給所述中間節(jié)點(diǎn)。
在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述確定單元用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體包括:所述確定單元,用于根據(jù)所述創(chuàng)建訂閱資源請求中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述確定單元用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體包括:所述確定單元,用于根據(jù)本地保存的與所述訂閱者相關(guān)策略信息中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
第二方面,本發(fā)明實(shí)施例提供的實(shí)現(xiàn)訂閱通知的中間節(jié)點(diǎn)包括:接收單元,用于接收到通知消息,所述通知消息包含更新后的被訂閱資源的狀態(tài);確定單元,用于確定所述接收單元接收到的所述通知消息包含最新狀態(tài)標(biāo)識;保存單元,用于保存所述接收單元接收到的所述通知消息;確定單元,還用于確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息;發(fā)送單元,用于根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述中間節(jié)點(diǎn)還包括查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的;所述保存單元,用于保存所述接收單元接收到的所述通知消息具體為:所述保存單元,用于將所述接收單元接收到的所述通知消息以替換所述查找單元查找到的所述其他通知消息的方式保存到本地;所述確定單元,還用于確定本地保存的根據(jù)所述訂閱資源生成的通知消息中的最新通知消息具體為:所述確定單元,還用于確定本地保存的根據(jù)所述訂閱資源生成的通知消息為最新通知消息。
在第二方面的第二種可能的實(shí)現(xiàn)方式中,所述中間節(jié)點(diǎn)還包括查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的;所述確定單元,還用于確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息具體為:所述確定單元,還用于確定本地保存的所述通知消息和所述查找單元查找到的所述其他通知消息中的最新通知消息。
結(jié)合第二方面的第一可能和第二可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識;所述查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:所述查找單元,用于查找到本地保存的其他通知消息,所述接收單元接收到的所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識相同。
結(jié)合第二方面的第一可能和第二可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識;所述查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:所述查找單元,用于查找到本地保存的其他通知消息,所述接收單元接收到的所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識以及消息發(fā)送源地址相同。
結(jié)合第二方面的第一可能和第二可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源的生成具體為:所述查找單元,用于查找到本地保存的其他通知消息,所述接收單元接收到的所述通知消息和所述其他通知消息包含的訂閱資源通用資源標(biāo)識符(Universal Resource Identifier,URI)相同。
第三方面,本發(fā)明實(shí)施例提供的訂閱通知的實(shí)現(xiàn)方法包括:接收訂閱者的創(chuàng)建訂閱資源請求,所述創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識;根據(jù)所述創(chuàng)建訂閱請求創(chuàng)建訂閱資源;確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài),為所述創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn),所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述最新狀態(tài)標(biāo)識,以便于所述中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)向所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息。
在第三方面的第一種可能的實(shí)現(xiàn)方式中,所述確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體為:根據(jù)所述創(chuàng)建訂閱資源請求中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
在第三方面的第二種可能的實(shí)現(xiàn)方式中,所述確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體為:根據(jù)本地保存的與所述訂閱者相關(guān)策略信息中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
第四方面,本發(fā)明實(shí)施例提供的訂閱通知的實(shí)現(xiàn)方法包括:接收到通知消息,所述通知消息包含更新后的被訂閱資源的狀態(tài),確定所述通知消息包含最新狀態(tài)標(biāo)識;保存所述接收到的通知消息;確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息;根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
在第四方面的第一種可能的實(shí)現(xiàn)方式中,所述保存所述接收到的通知消息具體包括:查找到本地保存有其他通知消息后,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的,將所述接收到的通知消息以替換所述其他通知消息的方式保存到本地;所述確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息具體包括:確定本地保存的根據(jù)所述訂閱資源生成的通知消息為最新通知消息。
在第四方面的第二種可能的實(shí)現(xiàn)方式中,所述確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息具體包括:查找到本地保存有其他通知消息后,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的,確定本地保存的所述通知消息和所述其他通知消息中的最新通知消息。
結(jié)合第四方面的第一可能和第二可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識;所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識相同。
結(jié)合第四方面的第一可能和第二可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識;所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識以及消息發(fā)送源地址相同。
結(jié)合第四方面的第一可能和第二可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的訂閱資源通用資源標(biāo)識符(Universal Resource Identifier,URI)相同。
第五方面,本發(fā)明還提供一種實(shí)現(xiàn)訂閱通知的托管公共服務(wù)實(shí)體hosting CSE,所述hosting CSE包括:
接收單元,用于接收訂閱者的創(chuàng)建訂閱資源請求,所述創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識;
資源創(chuàng)建單元,用于根據(jù)所述接收單元接收到的創(chuàng)建訂閱資源請求而創(chuàng)建訂閱資源;
確定單元,用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);
分配單元,用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);
生成單元,用于當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述資源創(chuàng)建單元創(chuàng)建的訂閱資源生成通知消息,所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述分配單元分配的最新狀態(tài)標(biāo)識,以便于中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)向所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息;
發(fā)送單元,用于將所述生成單元生成的通知消息發(fā)送給所述中間節(jié)點(diǎn)。
根據(jù)第五方面所述的托管公共服務(wù)實(shí)體hosting CSE,所述確定單元用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體包括:所述確定單元,用于根據(jù)所述創(chuàng)建訂閱資源請求中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
根據(jù)第五方面所述的托管公共服務(wù)實(shí)體hosting CSE,所述確定單元用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體包括:所述確定單元,用于根據(jù)本地保存的與所述訂閱者相關(guān)策略信息中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
根據(jù)第五方面所述的托管公共服務(wù)實(shí)體hosting CSE,所述分配單元用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)進(jìn)一步包括:所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識。
根據(jù)第五方面所述的托管公共服務(wù)實(shí)體hosting CSE,其特征在于,所述分配單元用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)進(jìn)一步包括:所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識。
根據(jù)第五方面所述的托管公共服務(wù)實(shí)體hosting CSE,其特征在于,所述分配單元用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)進(jìn)一步包括:所有的訂閱資源具有相同的最新狀態(tài)標(biāo)識。
根據(jù)第五方面所述的托管公共服務(wù)實(shí)體hosting CSE,其特征在于,所述發(fā)送單元用于將所述生成單元生成的通知消息發(fā)送給所述中間節(jié)點(diǎn)具體包括:所述發(fā)送單元,用于將所述生成單元生成的通知消息直接封裝在HTTP消息中發(fā)送給所述中間節(jié)點(diǎn),或者在根據(jù)所述通知消息生成存儲轉(zhuǎn)發(fā)資源的資源表述后,將所述資源表述封裝在Restful消息中發(fā)送給所述中間節(jié)點(diǎn)。
第六方面,還提供一種實(shí)現(xiàn)訂閱通知的中間節(jié)點(diǎn),所述中間節(jié)點(diǎn)包括:
接收單元,用于接收到通知消息,所述通知消息包含更新后的被訂閱資源的狀態(tài);
確定單元,用于確定所述接收單元接收到的所述通知消息包含最新狀態(tài)標(biāo)識;
保存單元,用于保存所述接收單元接收到的所述通知消息;
確定單元,還用于確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息;
發(fā)送單元,用于根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
根據(jù)第六方面所述的中間節(jié)點(diǎn),所述中間節(jié)點(diǎn)還包括查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述接收單元接收到的通知消息是根據(jù)相同的訂閱資源生成的;
所述保存單元,用于保存所述接收單元接收到的所述通知消息具體為:所述保存單元,用于將所述接收單元接收到的所述通知消息以替換所述查找單元查找到的所述其他通知消息的方式保存到本地;
所述確定單元,還用于確定本地保存的根據(jù)所述訂閱資源生成的通知消息中的最新通知消息具體為:所述確定單元,還用于確定本地保存的根據(jù)所述訂閱資源生成的通知消息為最新通知消息。
根據(jù)第六方面所述的中間節(jié)點(diǎn),
所述中間節(jié)點(diǎn)還包括查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述接收單元接收到的通知消息是根據(jù)相同的訂閱資源生成的;
所述確定單元,還用于確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息具體為:所述確定單元,還用于確定本地保存的所述通知消息和所述查找單元查找到的所述其他通知消息中的最新通知消息。
根據(jù)第六方面所述的中間節(jié)點(diǎn),
所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識;
所述查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:所述查找單元,用于查找到本地保存的其他通知消息,所述接收單元接收到的所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識相同。
根據(jù)第六方面所述的中間節(jié)點(diǎn),
所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識;
所述查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:所述查找單元,用于查找到本地保存的其他通知消息,所述接收單元接收到的所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識以及消息發(fā)送源地址相同。
根據(jù)第六方面所述的中間節(jié)點(diǎn),其特征在于,所述查找單元,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源的生成具體為:所述查找單元,用于查找到本地保存的其他通知消息,所述接收單元接收到的所述通知消息和所述其他通知消息包含的訂閱資源通用資源標(biāo)識符(Universal Resource Identifier,URI)相同。
根據(jù)第六方面所述的中間節(jié)點(diǎn),其特征在于,所述中間節(jié)點(diǎn)還包括刪除單元,用于在所述發(fā)送單元只發(fā)送所述最新通知消息之后將所述本地保存的根據(jù)所述訂閱資源生成的通知消息刪除。
第七方面,還提供一種訂閱通知的實(shí)現(xiàn)方法,其特征在于,所述方法包括:
接收訂閱者的創(chuàng)建訂閱資源請求,所述創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識;
根據(jù)所述創(chuàng)建訂閱資源請求創(chuàng)建訂閱資源;
確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài),為所述創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);
當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn),所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述最新狀態(tài)標(biāo)識,以便于所述中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息。
根據(jù)第七方面所述的方法,所述確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體為:根據(jù)所述創(chuàng)建訂閱資源請求中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
根據(jù)第七方面所述的方法,所述確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體為:根據(jù)本地保存的與所述訂閱者相關(guān)策略信息中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
根據(jù)第七方面所述的方法,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識。
根據(jù)第七方面所述的方法,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識。
根據(jù)第七方面所述的方法,所有的訂閱資源具有相同的最新狀態(tài)標(biāo)識。
根據(jù)第七方面所述的方法,所述根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn)包括:根據(jù)所述訂閱資源生成通知消息,并將所述通知消息直接封裝在HTTP消息中發(fā)送給中間節(jié)點(diǎn),或者根據(jù)所述通知消息生成存儲轉(zhuǎn)發(fā)資源的資源表述,將所述資源表述封裝在Restful消息中發(fā)送給中間節(jié)點(diǎn)。
第八方面,提供一種訂閱通知的實(shí)現(xiàn)方法,所述方法包括:
接收到通知消息,所述通知消息包含更新后的被訂閱資源的狀態(tài),確定所述通知消息包含最新狀態(tài)標(biāo)識;
保存所述接收到的通知消息;
確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息;
根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
根據(jù)第八方面所述的方法,
所述保存所述接收到的通知消息具體包括:查找到本地保存有其他通知消息后,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的,將所述接收到的通知消息以替換所述其他通知消息的方式保存到本地;
所述確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息具體包括:確定本地保存的根據(jù)所述訂閱資源生成的通知消息為最新通知消息。
根據(jù)第八方面所述的方法,所述確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息具體包括:查找到本地保存有其他通知消息后,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的,確定本地保存的所述通知消息和所述其他通知消息中的最新通知消息。
根據(jù)第八方面所述的方法,
所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識;
所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識相同。
根據(jù)第八方面所述的方法,
所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識;
所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識以及消息發(fā)送源地址相同。
根據(jù)第八方面所述的方法,所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的訂閱資源通用資源標(biāo)識符(Universal Resource Identifier,URI)相同。
根據(jù)第八方面所述的方法,所述方法之后還包括:將所述本地保存的根據(jù)所述訂閱資源生成的通知消息刪除。
由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,通過接收訂閱者的創(chuàng)建訂閱資源請求,根據(jù)所述創(chuàng)建訂閱請求創(chuàng)建訂閱資源;確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài),為所述創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識;當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn),所述通知消息包含所述最新狀態(tài)標(biāo)識,以便于所述中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識向訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息。對于只關(guān)心被訂閱資源最新狀態(tài)的訂閱者,可以避免在一個(gè)連接中將多個(gè)根據(jù)同一訂閱資源發(fā)送的通知消息同時(shí)發(fā)送給該訂閱者,從而節(jié)省網(wǎng)絡(luò)資源和該訂閱者的計(jì)算資源。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)M2M系統(tǒng)結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例提供的訂閱通知的實(shí)現(xiàn)系統(tǒng)結(jié)構(gòu)圖;
圖3為本發(fā)明實(shí)施例提供的實(shí)現(xiàn)訂閱通知的Hosting CSE結(jié)構(gòu)圖;
圖4為本發(fā)明實(shí)施例提供的實(shí)現(xiàn)訂閱通知的中間節(jié)點(diǎn)結(jié)構(gòu)圖;
圖5為本發(fā)明一個(gè)實(shí)施例提供的訂閱通知的實(shí)現(xiàn)方法流程圖;
圖6為本發(fā)明另一個(gè)實(shí)施例提供的訂閱通知的實(shí)現(xiàn)方法流程圖;
圖7為本發(fā)明一個(gè)實(shí)施例提供的訂閱通知的實(shí)現(xiàn)信令流程圖;
圖8為本發(fā)明另一個(gè)實(shí)施例提供的訂閱通知的實(shí)現(xiàn)信令流程圖;
圖9為本發(fā)明實(shí)施例提供的基于計(jì)算機(jī)系統(tǒng)的Hosting CSE結(jié)構(gòu)圖;
圖10為本發(fā)明實(shí)施例提供的基于計(jì)算機(jī)系統(tǒng)的中間節(jié)點(diǎn)結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供了一種訂閱通知的實(shí)現(xiàn)系統(tǒng),參考圖2,所述訂閱通知的實(shí)現(xiàn)系統(tǒng)200包括:
托管公共服務(wù)實(shí)體hosting CSE 201,用于接收訂閱者的創(chuàng)建訂閱資源請求,所述創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識;根據(jù)所述創(chuàng)建訂閱請求創(chuàng)建訂閱資源;確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài),為所述創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn),所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述最新狀態(tài)標(biāo)識,以便于所述中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)向所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息;和
中間節(jié)點(diǎn)202,用于接收到通知消息,所述通知消息包含更新后的被訂閱資源的狀態(tài),確定所述通知消息包含最新狀態(tài)標(biāo)識;保存所述接收到的通知消息;確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息;根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
其中,所述訂閱通知的實(shí)現(xiàn)系統(tǒng)200中的中間節(jié)點(diǎn)可以有一個(gè)或者多個(gè),即中間節(jié)點(diǎn)可以連接到其他的中間節(jié)點(diǎn),且它們在本發(fā)明的訂閱通知實(shí)現(xiàn)過程中執(zhí)行的操作一樣。
本發(fā)明一個(gè)實(shí)施例提供了用于實(shí)現(xiàn)訂閱通知的托管公共服務(wù)實(shí)體Hosting CSE,請參照圖3,該Hosting CSE 300包括:
接收單元301,用于接收訂閱者的創(chuàng)建訂閱資源請求,所述創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識;
資源創(chuàng)建單元302,用于根據(jù)所述接收單元301接收到的創(chuàng)建訂閱資源請求而創(chuàng)建訂閱資源;
確定單元303,用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);
分配單元304,用于在所述確定單元303確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元302創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);
生成單元305,用于當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述資源創(chuàng)建單元創(chuàng)建的訂閱資源生成通知消息,所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述分配單元分配的最新狀態(tài)標(biāo)識,以便于中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)向所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息;
發(fā)送單元306,用于將所述生成單元305生成的通知消息發(fā)送給所述中間節(jié)點(diǎn)。
可選的,確定單元303用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體包括:確定單元303,用于根據(jù)所述創(chuàng)建訂閱資源請求中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
可選的,確定單元303用于確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)具體包括:確定單元303,用于根據(jù)本地保存的與所述訂閱者相關(guān)策略信息中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
可選的,分配單元304用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)進(jìn)一步包括:所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識。
可選的,分配單元304用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)進(jìn)一步包括:所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識。
可選的,分配單元304用于在所述確定單元確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述資源創(chuàng)建單元創(chuàng)建的訂閱資源分配最新狀態(tài),所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)進(jìn)一步包括:所有的訂閱資源具有相同的最新狀態(tài)標(biāo)識。
可選的,發(fā)送單元306用于將所述生成單元生成的通知消息發(fā)送給所述中間節(jié)點(diǎn)具體包括:所述發(fā)送單元306,用于將所述生成單元305生成的通知消息直接封裝在HTTP消息中發(fā)送給所述中間節(jié)點(diǎn),或者在根據(jù)所述通知消息生成存儲轉(zhuǎn)發(fā)資源的資源表述后,將所述資源表述封裝在Restful消息中發(fā)送給所述中間節(jié)點(diǎn)。
本發(fā)明一個(gè)實(shí)施例提供了用于實(shí)現(xiàn)訂閱通知的中間節(jié)點(diǎn),請參照圖4,該中間節(jié)點(diǎn)400包括:
接收單元401,用于接收到通知消息,所述通知消息包含更新后的被訂閱資源的狀態(tài);
確定單元402,用于確定所述接收單元401接收到的所述通知消息包含最新狀態(tài)標(biāo)識;
保存單元404,用于保存所述接收單元401接收到的所述通知消息;
確定單元402,還用于確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息;
發(fā)送單元405,用于根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
可選的,所述中間節(jié)點(diǎn)400還包括查找單元403,用于查找到本地保存有其他通知消息,所述其他通知消息和所述接收單元401接收到的通知消息是根據(jù)相同的訂閱資源生成的;所述保存單元404,用于保存所述接收單元401接收到的所述通知消息具體為:所述保存單元404,用于將所述接收單元401接收到的所述通知消息以替換所述查找單元403查找到的所述其他通知消息的方式保存到本地;所述確定單元402,還用于確定本地保存的根據(jù)所述訂閱資源生成的通知消息中的最新通知消息具體為:所述確定單元402,還用于確定本地保存的根據(jù)所述訂閱資源生成的通知消息為最新通知消息。
可選的,中間節(jié)點(diǎn)400還包括查找單元403,用于查找到本地保存有其他通知消息,所述其他通知消息和所述接收單元401接收到的通知消息是根據(jù)相同的訂閱資源生成的;所述確定單元402,還用于確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息具體為:所述確定單元402,還用于確定本地保存的所述通知消息和所述查找單元403查找到的所述其他通知消息中的最新通知消息。
可選的,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識;所述查找單元403,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:所述查找單元403,用于查找到本地保存的其他通知消息,所述接收單元401接收到的所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識相同。
可選的,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識;所述查找單元403,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:所述查找單元403,用于查找到本地保存的其他通知消息,所述接收單元401接收到的所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識以及消息發(fā)送源地址相同。
可選的,所述查找單元403,用于查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:所述查找單元403,用于查找到本地保存的其他通知消息,所述接收單元401接收到的所述通知消息和所述其他通知消息包含的訂閱資源通用資源標(biāo)識符(Universal Resource Identifier,URI)相同。
在M2M網(wǎng)絡(luò)中,M2M業(yè)務(wù)平臺可以是各計(jì)算機(jī),具有處理器的設(shè)備。M2M網(wǎng)關(guān)和M2M終端在設(shè)備上沒有嚴(yán)格的區(qū)分,比如做網(wǎng)關(guān)的設(shè)備也可以做為終端,此外為各種終端設(shè)備,如手機(jī),計(jì)算機(jī),PDA,筆記本電腦,遠(yuǎn)程控制器,家用電器,各種儀器儀表、傳感器等都可以做為M2M網(wǎng)絡(luò)的網(wǎng)關(guān)或終端。在上述模塊實(shí)施例中,所包括的各個(gè)模塊只是按照功能邏輯進(jìn)行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能模塊的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護(hù)范圍。
本發(fā)明實(shí)施例提供了訂閱通知的實(shí)現(xiàn)方法,應(yīng)用于部署被訂閱資源的托管公共服務(wù)實(shí)體Hosting CSE,請參照圖5,該方法包括:
步驟501:接收訂閱者的創(chuàng)建訂閱資源請求,所述創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識。
步驟502:根據(jù)所述創(chuàng)建訂閱請求創(chuàng)建訂閱資源。
步驟503:確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài),為所述創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
具體的,確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)可以為:根據(jù)所述創(chuàng)建訂閱資源請求中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài),或者,根據(jù)本地保存的與所述訂閱者相關(guān)策略信息中包含的指示信息確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)。
具體的,所述最新狀態(tài)標(biāo)識可以是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識,或者,所述最新狀態(tài)標(biāo)識可以是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識,或者,所有的訂閱資源具有相同的最新狀態(tài)標(biāo)識。
步驟504:當(dāng)所述被訂閱資源的狀態(tài)發(fā)生更新時(shí),根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn),所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述最新狀態(tài)標(biāo)識,以便于所述中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)向所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息。
具體的,根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn)可以為:根據(jù)所述訂閱資源生成通知消息,并將所述通知消息直接封裝在HTTP消息中發(fā)送給中間節(jié)點(diǎn),或者根據(jù)所述通知消息生成存儲轉(zhuǎn)發(fā)資源的資源表述,將所述資源表述封裝在Restful消息中發(fā)送給中間節(jié)點(diǎn)。
本發(fā)明另一個(gè)實(shí)施例提供了訂閱通知的實(shí)現(xiàn)方法,應(yīng)用于轉(zhuǎn)發(fā)通知消息的中間節(jié)點(diǎn),請參照圖6,該方法包括:
步驟601:接收到通知消息,所述通知消息包含更新后的被訂閱資源的狀態(tài),確定所述通知消息包含最新狀態(tài)標(biāo)識。
步驟602:保存所述接收到的通知消息。
步驟603:確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息。
可選的,當(dāng)步驟602中保存所述接收到的通知消息具體包括:查找到本地保存有其他通知消息后,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的,將所述接收到的通知消息以替換所述其他通知消息的方式保存到本地;本步驟具體為:確定本地保存的根據(jù)所述訂閱資源生成的通知消息為最新通知消息。
可選的,本步驟具體為:查找到本地保存有其他通知消息后,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的,確定本地保存的所述通知消息和所述其他通知消息中的最新通知消息。
其中,所述最新狀態(tài)標(biāo)識具體為一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識,所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識相同;或者,所述最新狀態(tài)標(biāo)識具體為一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識,所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的最新狀態(tài)標(biāo)識以及消息發(fā)送源地址相同;或者,所述查找到本地保存有其他通知消息,所述其他通知消息和所述通知消息是根據(jù)相同的訂閱資源生成的具體為:查找到本地保存的其他通知消息,所述通知消息和所述其他通知消息包含的訂閱資源通用資源標(biāo)識符(Universal Resource Identifier,URI)相同。
步驟604:根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
在所述滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息之后,還包括將本地保存的根據(jù)所述訂閱資源生成的通知消息刪除。
本發(fā)明實(shí)施例提供了實(shí)現(xiàn)訂閱通知的信令流程圖,請參照圖7示。
在本實(shí)施例中,App1注冊到其本地CSE上,該CSE為App1創(chuàng)建注冊資源,并為該注冊資源分配ID,然后生成該注冊資源的URI,并將該注冊資源URI返回給App1。其中該注冊資源ID是一個(gè)全局唯一的字符串,例如application1,注冊資源URI由注冊資源ID和該本地CSE的URI組成。因此,該注冊資源URI也是一個(gè)全局唯一的字符串,注冊資源ID和注冊資源URI均可以是該注冊資源的唯一標(biāo)識。例如,在本實(shí)施例中App1的本地CSE URI是http://example.com/gateway1,則該注冊資源URI是http://example.com/gateway1/application1。并且,App1在注冊過程或注冊結(jié)束后設(shè)置該注冊資源的訪問權(quán)限,允許包含App2的其他用戶訪問、訂閱該注冊資源。在此,該本地CSE被稱作App1的Hosting CSE。因此,當(dāng)App2訪問該Hosting CSE時(shí),可以發(fā)現(xiàn)App1在Hosting CSE上的注冊資源,在獲取所述注冊資源的唯一標(biāo)識后訂閱所述注冊資源,并且訂閱者App2希望每次接收到的是該注冊資源的最新狀態(tài)。具體的實(shí)現(xiàn)過程如下:
步驟701:訂閱者App2向自身的注冊網(wǎng)關(guān)CSE2發(fā)送創(chuàng)建訂閱資源請求,該創(chuàng)建訂閱資源請求中包含被訂閱資源的唯一標(biāo)識以及訂閱者App2的唯一標(biāo)識。
在本實(shí)施中,上述的被訂閱資源也就是App1在Hosting CSE上的注冊資源,因此,上述被訂閱資源的唯一標(biāo)識,也就是App1在Hosting CSE上的注冊資源的唯一標(biāo)識。
可選的,該創(chuàng)建訂閱資源請求中還可以包括訂閱條件。
可選的,App2通過在所述創(chuàng)建訂閱資源請求中包含指示信息,以指示訂閱者需要獲取的是被訂閱資源的最新狀態(tài);或者App2事先訪問M2M業(yè)務(wù)提供商的設(shè)置系統(tǒng),在配置策略信息中添加指示信息;又或App2在與M2M業(yè)務(wù)提供商簽約時(shí),約定App2只獲取被訂閱資源的最新狀態(tài)信息,M2M業(yè)務(wù)提供商在配置策略信息中添加指示信息;又或,對被訂閱資源來說其最新產(chǎn)生的數(shù)據(jù)才有意義,比如智能家居中用于顯示電器開關(guān)的狀態(tài)的數(shù)據(jù),這樣被訂閱資源所在的Hosting CSE或M2M業(yè)務(wù)提供商會在配置策略信息中添加指示信息,以指示App2需要獲取的是被訂閱資源的最新狀態(tài),所述配置策略信息可以保存在Hosting CSE上。
其中,在所述創(chuàng)建訂閱資源請求中或配置策略信息包含指示信息,以指示訂閱者需要獲取的是被訂閱資源的最新狀態(tài),具體的可以是:通過在所述創(chuàng)建訂閱資源請求中或者配置策略信息中增加一個(gè)參數(shù)RepeatCheck且該參數(shù)的值為指定的有效值來指示訂閱者需要獲取的是被訂閱資源的最新狀態(tài),該參數(shù)可以是布爾型、整形、字符串類型或其他類型。例如,在本實(shí)施例中,增加的參數(shù)RepeatCheck為布爾型,當(dāng)參數(shù)值為TRUE指示訂閱者只獲取被訂閱資源的最新狀態(tài)。
步驟702:CSE2接收到所述創(chuàng)建訂閱資源請求后,根據(jù)所述創(chuàng)建訂閱請求將所述創(chuàng)建訂閱請求轉(zhuǎn)發(fā)到具有App1的注冊資源(即被訂閱資源)的Hosting CSE。具體的,CSE2通過該創(chuàng)建訂閱資源請求中攜帶的被訂閱資源唯一標(biāo)識轉(zhuǎn)發(fā)到具有該被訂閱資源的Hosting CSE。
步驟703:Hosting CSE接收到所述創(chuàng)建訂閱資源請求后創(chuàng)建訂閱資源,并在確定訂閱者需要獲取的是被訂閱資源的最新狀態(tài)后,為所述訂閱資源分配最新狀態(tài)標(biāo)識。為該訂閱資源分配訂閱資源ID并生成訂閱資源URI,并保存該訂閱資源和被訂閱資源之間的關(guān)聯(lián)關(guān)系。
其中,分配的訂閱資源ID是一個(gè)在Hosting CSE中唯一的字符串,例如subscriptionB,訂閱資源URI由被訂閱資源URI和訂閱資源ID組成,因?yàn)楸挥嗛嗁Y源URI是一個(gè)全局唯一的字符串,故訂閱資源URI也是一個(gè)全局唯一的字符串。例如,在本實(shí)施例中,訂閱資源URI的值是http://example.com/gateway1/application1/subscriptionB。具體的,通過將創(chuàng)建的訂閱資源subscriptionB作為被訂閱資源application1的資源樹的子節(jié)點(diǎn)來保存subscriptionB和application1兩者之間的關(guān)聯(lián)關(guān)系。其中,所述創(chuàng)建的訂閱資源包括所述創(chuàng)建訂閱資源請求中攜帶的被訂閱資源的唯一標(biāo)識和App2的唯一標(biāo)識??蛇x的,當(dāng)該創(chuàng)建訂閱資源請求中包含訂閱條件時(shí),訂閱資源還包含該訂閱條件。
其中,所述Hosting CSE確定訂閱者需要獲取的是被訂閱資源的最新狀態(tài)具體為:根據(jù)所述創(chuàng)建訂閱資源請求中包含的指示信息確定App2需要獲取的是被訂閱資源的最新狀態(tài),或者根據(jù)本地保存的與所述App2相關(guān)策略信息中包含的指示信息確定App2需要獲取的是被訂閱資源的最新狀態(tài)。具體的,所述Hosting CSE通過檢查所述創(chuàng)建訂閱資源請求中或所述策略信息中是否具有參數(shù)RepeatCheck并且該參數(shù)是否為指定的有效值來判斷App2需要獲取的是被訂閱資源的最新狀態(tài)。例如,在本實(shí)施例中,通過確定攜帶布爾型參數(shù)RepeatCheck且其值為True來確定App2需要獲取被訂閱資源的最新狀態(tài)。
在本實(shí)施例的第一個(gè)例子中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識。具體的,該全局唯一的最新狀態(tài)標(biāo)識可以是訂閱資源URI,也可以是其他的字符串。
在本實(shí)施例的第二個(gè)例子中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識。具體的,該唯一的最新狀態(tài)標(biāo)識可以是訂閱資源ID,也可以是其他的字符串。
在本實(shí)施例的第三個(gè)例子中,所有的訂閱資源具有相同的最新狀態(tài)標(biāo)識,具體的,該最新狀態(tài)標(biāo)識可以是一個(gè)指定字符串。
其中,在為所述訂閱資源分配最新狀態(tài)標(biāo)識后,Hosting CSE可以將該最新狀態(tài)標(biāo)識作為該訂閱資源的屬性或者創(chuàng)建一張表以保存該訂閱資源與該最新狀態(tài)標(biāo)識的關(guān)聯(lián)關(guān)系。
步驟704:當(dāng)App1發(fā)生狀態(tài)更新時(shí),向Hosting CSE發(fā)送狀態(tài)更新請求。
具體的,App1發(fā)生狀態(tài)更新包括應(yīng)用注銷和App1屬性發(fā)生改變。具體的,所述狀態(tài)更新請求中包含Hosting CSE為App1的注冊資源所分配的注冊資源URI。在本發(fā)明實(shí)施例中,所述注冊資源URI也就是被訂閱資源URI。
步驟705:Hosting CSE接收到所述狀態(tài)更新請求后更新被訂閱資源的狀態(tài),根據(jù)所述訂閱資源生成第一通知消息后發(fā)送給中間節(jié)點(diǎn),并且在所述第一通知消息中包含所述更新后的被訂閱資源的狀態(tài)以及最新狀態(tài)標(biāo)識。
具體地,該步驟包括:Hosting CSE接收到所述狀態(tài)更新請求后,根據(jù)所述狀態(tài)更新請求中攜帶的被訂閱資源URI,更新所述被訂閱資源的狀態(tài)。并且,Hosting CSE根據(jù)被訂閱資源與訂閱資源的對應(yīng)關(guān)系找到所述訂閱資源,確定所述訂閱資源包含最新狀態(tài)標(biāo)識后,根據(jù)所述訂閱資源生成第一通知消息,所述第一通知消息中包含發(fā)送源地址(即Hosting CSE URI)以及接收方地址(即App2URI)以及訂閱資源URI,并且,在所述第一通知消息中包含所述更新后的被訂閱資源的狀態(tài)以及所述最新狀態(tài)標(biāo)識。具體的,該第一通知消息可以為原語格式的消息,其中發(fā)送源地址Hosting CSE URI、接收方地址App2URI以及最新狀態(tài)標(biāo)識包含在所述第一通知消息的屬性部分,訂閱資源URI以及更新后的被訂閱資源的狀態(tài)包含在所述第一通知消息的資源部分,可選的,所述第一通知消息的資源部分可以包含所述更新后的被訂閱資源。可選的,當(dāng)所述訂閱資源中包含訂閱條件時(shí),確定被訂閱資源狀態(tài)的改變滿足所述訂閱條件后才生成所述第一通知消息。其中,接收方地址可以是根據(jù)所述訂閱資源的ContactURI獲取的。Hosting CSE在生成第一通知消息后,查詢路由表獲取下一跳為中間節(jié)點(diǎn)后,將所述第一通知消息發(fā)送到所述中間節(jié)點(diǎn)。
本步驟中,在將第一通知消息發(fā)送給中間節(jié)點(diǎn)之前,Hosting CSE根據(jù)本地保存的發(fā)送配置信息確定第一通知消息的下發(fā)方式,具體的,可以采用以下兩種下發(fā)方式:方式1、直接將第一通知消息封裝在超文本轉(zhuǎn)移協(xié)議(HTTP-Hypertext transfer protocol,HTTP)消息中下發(fā),例如,通過HTTP POST發(fā)送所述第一通知消息,優(yōu)選的,將所述原語格式的第一通知消息的屬性部分封裝到HTTP的消息頭中,第一通知消息的資源部分封裝到HTTP的消息體中;方式2、根據(jù)第一通知消息生成存儲轉(zhuǎn)發(fā)資源的資源表述后,將生成的存儲轉(zhuǎn)發(fā)資源的資源表述封裝在Restful消息中下發(fā),例如,生成<delivery>的資源表述,將第一通知消息作為<delivery>的資源表述的data屬性值,然后將所述<delivery>的資源表述封裝在Restful Create消息中下發(fā)。
步驟706:中間節(jié)點(diǎn)接收到所述第一通知消息并確定該第一通知消息中包含最新狀態(tài)標(biāo)識后,檢查本地是否保存有與所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息。在實(shí)施例中,由于這是App1被訂閱后第一次狀態(tài)更新,因此,本地未保存有與所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息,將所述第一通知消息保存在本地。
在上述提到的本實(shí)施例的第一個(gè)例子中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且全局唯一的標(biāo)識,則中間節(jié)點(diǎn)檢查本地是否保存有與所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息具體為:確定中間節(jié)點(diǎn)是否保存有和所述第一通知消息包含相同的最新狀態(tài)標(biāo)識的其他通知消息。
在上述提到的本實(shí)施例的第二個(gè)例子中,所述最新狀態(tài)標(biāo)識是一個(gè)用于識別所述訂閱資源且在托管公共服務(wù)實(shí)體hosting CSE上唯一的標(biāo)識,則中間節(jié)點(diǎn)檢查本地是否保存有與所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息具體為:確定中間節(jié)點(diǎn)是否保存有和所述第一通知消息包含相同的最新狀態(tài)標(biāo)識以及消息發(fā)送源地址的其他通知消息。
在上述提到的本實(shí)施例的第三個(gè)例子中,所有的訂閱資源具有相同的最新狀態(tài)標(biāo)識,則中間節(jié)點(diǎn)檢查本地是否保存有與所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息具體為:確定中間節(jié)點(diǎn)是否保存有和所述第一通知消息包含相同的訂閱資源URI的其他通知消息。而且,在本實(shí)施例的第一個(gè)例子或第二個(gè)例子中,也可以采用該第三種方式檢查本地是否保存有和所述第一通知消息根據(jù)相同訂閱資源生成的其他通知消息。
在本實(shí)施例的第一個(gè)例子中,本步驟首先判斷出第一通知消息包含最新狀態(tài)標(biāo)識后,對于每個(gè)其他通知消息,要對該消息內(nèi)容進(jìn)行一次解析以獲取最新狀態(tài)標(biāo)識并進(jìn)行一次判斷、即判斷該獲取到的最新狀態(tài)標(biāo)識是否和第一通知消息包含的最新狀態(tài)標(biāo)識相同;在本實(shí)施例的第二個(gè)例子中,本步驟首先判斷出第一通知消息包含最新狀態(tài)標(biāo)識后,要進(jìn)一步獲取第一通知消息包含的消息發(fā)送源地址,對于每個(gè)其他通知消息,要對該消息內(nèi)容進(jìn)行一次解析以獲取最新狀態(tài)標(biāo)識和消息發(fā)送源地址并進(jìn)行兩次判斷、即判斷該獲取到的最新狀態(tài)標(biāo)識是否和第一通知消息包含的最新狀態(tài)標(biāo)識相同以及該獲取到的消息發(fā)送源地址是否和第一通知消息包含的消息發(fā)送源地址相同;在本實(shí)施例的第三個(gè)例子中,本步驟首先判斷出第一通知消息包含最新狀態(tài)標(biāo)識后,要進(jìn)一步獲取第一通知消息包含的訂閱資源URI,對于每個(gè)其他通知消息,要對該消息內(nèi)容進(jìn)行一次解析以獲取訂閱資源URI并進(jìn)行一次判斷、即判斷該獲取到的訂閱資源URI是否和第一通知消息包含的訂閱資源URI相同;因此,相比較而言,本實(shí)施例的第一個(gè)例子處理效率最高。
在步驟705中采用方式1下發(fā)第一通知消息時(shí),所述檢查本地是否保存有與所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息具體為:在緩存隊(duì)列中檢查是否保存有和所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息;所述將所述第一通知消息保存在本地具體為:將第一通知消息保存在中間節(jié)點(diǎn)的緩存隊(duì)列中。中間節(jié)點(diǎn)包含多個(gè)緩存隊(duì)列,每個(gè)緩存隊(duì)列用于保存下一跳CSE相同的通知消息,并且根據(jù)中間節(jié)點(diǎn)的轉(zhuǎn)發(fā)存儲策略為所述緩存隊(duì)列設(shè)置關(guān)聯(lián)的定時(shí)器;當(dāng)向所述緩存隊(duì)列中存放通知消息時(shí),如果是該緩存隊(duì)列中的第一個(gè)通知消息,則在存放該通知消息后啟動所述緩存隊(duì)列的定時(shí)器。
在步驟705中采用方式2下發(fā)第一通知消息時(shí),所述檢查本地是否保存有與所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息具體為:在存儲轉(zhuǎn)發(fā)資源中檢查是否保存有和所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息;所述將所述第一通知消息保存在本地具體為:在中間節(jié)點(diǎn)創(chuàng)建存儲轉(zhuǎn)發(fā)資源,將所述第一通知消息保存在所述存儲轉(zhuǎn)發(fā)資源的屬性中,例如,創(chuàng)建<delivery>資源,將第一通知消息保存在<delivery>資源的data屬性中。中間節(jié)點(diǎn)會根據(jù)轉(zhuǎn)發(fā)存儲策略為具有相同下一跳CSE的通知消息設(shè)置統(tǒng)一的定時(shí)器,并記錄所述定時(shí)器與所述CSE、包含所述通知消息的存儲轉(zhuǎn)發(fā)資源的關(guān)聯(lián)關(guān)系;每創(chuàng)建一個(gè)存儲轉(zhuǎn)發(fā)資源時(shí),確定所述存儲轉(zhuǎn)發(fā)資源中包含的通知消息的下一跳為所述CSE后,在記錄信息中增加所述定時(shí)器與所述存儲轉(zhuǎn)發(fā)資源的關(guān)聯(lián)關(guān)系;當(dāng)在記錄信息中增加定時(shí)器與存儲轉(zhuǎn)發(fā)資源的關(guān)聯(lián)關(guān)系時(shí)、如果是該記錄信息中的第一個(gè)存儲轉(zhuǎn)發(fā)資源則啟動所述定時(shí)器。
步驟707:App1再次發(fā)生狀態(tài)更新,向Hosting CSE發(fā)送狀態(tài)更新請求。
該步驟的實(shí)現(xiàn)參考步驟704的詳細(xì)描述。
步驟708:Hosting CSE接收到所述狀態(tài)更新請求后更新被訂閱資源的狀態(tài),根據(jù)所述訂閱資源生成第二通知消息后發(fā)送給中間節(jié)點(diǎn),并且在所述第二通知消息中包含所述更新后的被訂閱資源的狀態(tài)以及最新狀態(tài)標(biāo)識。
其中,該步驟中更新被訂閱資源狀態(tài)的描述參見步驟705;其中,Hosting CSE根據(jù)所述訂閱資源生成第二通知消息、并且在所述第二通知消息中包含所述更新后的被訂閱資源的狀態(tài)以及最新狀態(tài)標(biāo)識的描述和步驟705中對第一通知消息的操作方式相同。
其中,Hosting CSE發(fā)送第二通知消息的方式和步驟705中發(fā)送第一通知消息的方式相同。
步驟707:中間節(jié)點(diǎn)接收到所述第二通知消息并確定包含最新狀態(tài)標(biāo)識后,檢查本地是否保存有和所述第二通知消息根據(jù)相同的訂閱資源生成的其他通知消息。在本實(shí)施例中,前述已經(jīng)保存了第一通知消息,中間節(jié)點(diǎn)確定所述第一通知消息和所述第二通知消息根據(jù)相同的訂閱資源生成后,將所述第二通知消息替換所述第一通知消息。
其中,中間節(jié)點(diǎn)檢查本地是否保存有和所述第二通知消息根據(jù)相同的訂閱資源生成的其他通知消息的實(shí)現(xiàn)方式,和步驟706中檢查本地是否保存有和所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息的實(shí)現(xiàn)方式相同。
其中,當(dāng)步驟708采用步驟705中的方式1下發(fā)第二通知消息時(shí),所述將所述第二通知消息替換所述第一通知消息具體為:將緩存隊(duì)列中的所述第一通知消息替換為所述第二通知消息;當(dāng)步驟708采用步驟705中的方式2下發(fā)第二通知消息時(shí),所述將所述第二通知消息替換所述第一通知消息具體為:將存儲轉(zhuǎn)發(fā)資源中的所述第一通知消息替換為所述第二通知消息。
步驟710:當(dāng)滿足消息發(fā)送條件時(shí),中間節(jié)點(diǎn)將本地保存的通知消息發(fā)送給下一跳CSE,在本實(shí)施例中,本地保存的是第二通知消息,中間節(jié)點(diǎn)將所述第二通知消息發(fā)送給CSE2。
可選的,步驟706之后直接進(jìn)入步驟710,即步驟706之后沒有收到根據(jù)所述訂閱資源生成的其他通知消息就滿足消息發(fā)送條件,本地保存的是第一通知消息,中間節(jié)點(diǎn)將所述第一通知消息發(fā)送給CSE2。
可選的,本步驟之前中間節(jié)點(diǎn)又接收到根據(jù)所述訂閱資源生成的一個(gè)或多個(gè)其他通知消息,本地保存的是所述其他通知消息中的最后一個(gè),中間節(jié)點(diǎn)將所述其他通知消息中的最后一個(gè)發(fā)送給CSE2。
當(dāng)步驟705中采用方式1下發(fā)第一通知消息時(shí),該步驟具體為:當(dāng)緩存隊(duì)列關(guān)聯(lián)的定時(shí)器到期后,將所述緩存隊(duì)列中保存的通知消息發(fā)送給下一跳CSE,并將所述緩存隊(duì)列關(guān)聯(lián)的定時(shí)器清零以及將所述緩存隊(duì)列中的通知消息刪除。
當(dāng)步驟705中采用步驟2下發(fā)第一通知消息時(shí),該步驟具體為:當(dāng)存儲轉(zhuǎn)發(fā)資源關(guān)聯(lián)的定時(shí)器到期后,將所述記錄信息中記錄的所有存儲轉(zhuǎn)發(fā)資源包含的通知消息發(fā)送給下一跳CSE,并將所述存儲轉(zhuǎn)發(fā)資源關(guān)聯(lián)的定時(shí)器清零以及將所述存儲轉(zhuǎn)發(fā)資源刪除。
可選的,該中間節(jié)點(diǎn)將第二通知消息發(fā)送給CSE2前將經(jīng)過第二中間節(jié)點(diǎn),該第二中間節(jié)點(diǎn)將執(zhí)行和本中間節(jié)點(diǎn)同樣的操作,這里不再贅述。
步驟711:CSE2接收到第二通知消息后發(fā)送給App2。
具體的,網(wǎng)關(guān)CSE2根據(jù)第二通知消息的接收方地址判斷App2注冊在該網(wǎng)關(guān)上,直接將第二通知消息發(fā)送給App2。
在該實(shí)施例中,通過Hosting CSE確定訂閱者需要獲取的是被訂閱資源的最新狀態(tài)后,在發(fā)送給中間節(jié)點(diǎn)的通知消息中包含最新狀態(tài)標(biāo)識,以便中間節(jié)點(diǎn)在確定接收到的通知消息中包含最新狀態(tài)標(biāo)識后,替換掉本地保存的和所述通知消息根據(jù)相同的訂閱資源生成的已有通知消息,可以保證中間節(jié)點(diǎn)只轉(zhuǎn)發(fā)根據(jù)所述訂閱資源生成的最新通知消息,從而避免了訂閱者在一個(gè)連接中接收到根據(jù)同一個(gè)訂閱資源發(fā)送的多條通知消息,節(jié)省了網(wǎng)絡(luò)資源和計(jì)算資源。
本發(fā)明另一個(gè)實(shí)施例提供了實(shí)現(xiàn)訂閱通知的信令流程圖,請參照圖8示。
在本實(shí)施例中,App1注冊到其本地CSE上、設(shè)置注冊資源的訪問權(quán)限的過程參考圖7對應(yīng)實(shí)施例的詳細(xì)描述。當(dāng)App2訪問Hosting CSE時(shí),可以發(fā)現(xiàn)App1在Hosting CSE上的注冊資源,在獲取所述注冊資源的唯一標(biāo)識后訂閱所述注冊資源,并且訂閱者App2希望每次接收到的是該注冊資源的最新狀態(tài)。具體的實(shí)現(xiàn)過程如下:
步驟801-步驟805:參考圖7對應(yīng)實(shí)施例的步驟701-步驟705。
步驟806:中間節(jié)點(diǎn)將所述第一通知消息保存在本地。
具體的,所述將所述第一通知消息保存在本地的實(shí)現(xiàn)方式參考圖7對應(yīng)實(shí)施例的步驟706中將第一通知消息保存在本地的描述。
步驟807-步驟808:參考圖7對應(yīng)實(shí)施例的步驟707-步驟708。
步驟809:中間節(jié)點(diǎn)將所述第二通知消息保存在本地。
具體的,所述將所述第二通知消息保存在本地的實(shí)現(xiàn)方式參考圖7對應(yīng)實(shí)施例的步驟706中將第一通知消息保存在本地的描述。
步驟810:當(dāng)滿足消息發(fā)送條件時(shí),中間節(jié)點(diǎn)確定本地保存的第一通知消息包含最新狀態(tài)標(biāo)識后,檢查本地是否保存有和所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息,將所述其他通知消息和第一通知消息中的最新通知消息發(fā)送給下一跳CSE。在本實(shí)施例中,本地保存的是第一通知消息和第二通知消息,中間節(jié)點(diǎn)確定第二通知消息是最新通知消息后,將所述第二通知消息發(fā)送給CSE2。
可選的,步驟806之后直接進(jìn)入步驟810,即步驟806之后沒有收到根據(jù)所述訂閱資源生成的其他通知消息就滿足消息發(fā)送條件,本地只保存有第一通知消息,中間節(jié)點(diǎn)將所述第一通知消息發(fā)送給CSE2。
可選的,本步驟之前中間節(jié)點(diǎn)又收到根據(jù)所述訂閱資源生成的一個(gè)或多個(gè)其他通知消息,本地保存的是所述第一通知消息、第二通知消息和所述其他通知消息,中間節(jié)點(diǎn)將所述第一通知消息、第二通知消息和其他通知消息中的最新通知消息發(fā)送給CSE2。
當(dāng)步驟805中采用方式1下發(fā)第一通知消息時(shí),所述當(dāng)滿足消息發(fā)送條件時(shí)具體為:當(dāng)緩存隊(duì)列關(guān)聯(lián)的定時(shí)器到期后。
當(dāng)步驟805中采用方式2下發(fā)第一通知消息時(shí),所述當(dāng)滿足消息發(fā)送條件時(shí)具體為:當(dāng)存儲轉(zhuǎn)發(fā)資源關(guān)聯(lián)的定時(shí)器到期后。
具體的,所述檢查本地是否保存有和所述第一通知消息根據(jù)相同的訂閱資源生成的其他通知消息的實(shí)現(xiàn)參考圖7對應(yīng)實(shí)施例的步驟706中對該操作的描述。
具體的,通知消息中包含時(shí)間戳信息,所述將所述其他通知消息和第一通知消息中的最新通知消息發(fā)送給下一跳CSE具體為:根據(jù)所述其他通知消息以及第一通知消息中包含的時(shí)間戳信息,將所述其他通知消息和第一通知消息中的最新通知消息發(fā)送給下一跳CSE。
具體的,該步驟中在將所述其他通知消息和第一通知消息中的最新通知消息發(fā)送給下一跳CSE之后,還包括將本地保存的所述其他通知消息和第一通知消息刪除
可選的,該中間節(jié)點(diǎn)將第二通知消息發(fā)送給CSE2前將經(jīng)過第二中間節(jié)點(diǎn),該第二中間節(jié)點(diǎn)將執(zhí)行和本中間節(jié)點(diǎn)同樣的操作,這里不再贅述。
步驟811:參考圖7對應(yīng)實(shí)施例的步驟711。
在該實(shí)施例中,通過Hosting CSE確定訂閱者需要獲取的是被訂閱資源的最新狀態(tài)后,在發(fā)送給中間節(jié)點(diǎn)的通知消息中包含最新狀態(tài)標(biāo)識,中間節(jié)點(diǎn)保存所述通知消息,當(dāng)需要發(fā)送所述通知消息時(shí),中間節(jié)點(diǎn)確定所述通知消息中包含最新狀態(tài)標(biāo)識后,查找本地保存的和該通知消息根據(jù)相同的訂閱資源生成的其他通知消息,將該通知消息和其他通知消息中最新的通知消息下發(fā),可以保證中間節(jié)點(diǎn)只轉(zhuǎn)發(fā)根據(jù)所述訂閱資源生成的最新通知,從而避免了訂閱者在一個(gè)連接中接收到根據(jù)同一個(gè)訂閱資源發(fā)送的多條通知,節(jié)省了網(wǎng)絡(luò)資源和計(jì)算資源。
本發(fā)明實(shí)施例中的Hosting CSE可以基于計(jì)算機(jī)系統(tǒng)來實(shí)現(xiàn),圖5、圖7、圖8所示的方法均可在基于計(jì)算機(jī)系統(tǒng)的Hosting CSE來實(shí)現(xiàn)。圖9示出了基于計(jì)算機(jī)系統(tǒng)來實(shí)現(xiàn)的Hosting CSE的實(shí)施例。本實(shí)施例中Hosting CSE可以包括:處理器901、存儲器902和通信接口903,其中:
通信接口903,用于與訂閱者和中間節(jié)點(diǎn)通信。Hosting CSE與訂閱者、中間節(jié)點(diǎn)之間交互的消息均通過通信接口903發(fā)送和接收。具體地,通信接口903用于接收訂閱者的創(chuàng)建訂閱資源請求以及向中間節(jié)點(diǎn)發(fā)送通知消息;存儲器902用于存儲程序指令;處理器901用于通信接口903從訂閱者接收到創(chuàng)建訂閱資源請求之后,調(diào)用存儲器902中存儲的程序指令,執(zhí)行以下操作:根據(jù)所述創(chuàng)建訂閱請求創(chuàng)建訂閱資源;確定所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài)后,為所述創(chuàng)建的訂閱資源分配最新狀態(tài)標(biāo)識,所述最新狀態(tài)標(biāo)識用于指示所述訂閱者需要獲取的是所述被訂閱資源的最新狀態(tài);當(dāng)所述被訂閱資源發(fā)生更新時(shí),根據(jù)所述訂閱資源生成通知消息并發(fā)送給中間節(jié)點(diǎn),所述通知消息包含所述更新后的被訂閱資源的狀態(tài)以及所述最新狀態(tài)標(biāo)識,以便于所述中間節(jié)點(diǎn)接收到所述通知消息后,根據(jù)所述最新狀態(tài)標(biāo)識在滿足消息發(fā)送條件時(shí)向所述訂閱者只發(fā)送根據(jù)所述訂閱資源生成的最新通知消息。
其中,處理器901可以是中央處理器(central processing unit,CPU)、專用集成電路(application-specific integrated circuit,ASIC)等。其中,本實(shí)施例中的Hosting CSE可以包括總線904。處理器901、存儲器902以及通信接口903之間可通過總線904連接并通信。其中,存儲器902可以包括:隨機(jī)存取存儲器(random access memory,RAM),只讀存儲器(read-only memory,ROM),磁盤等具有存儲功能的實(shí)體。
處理器901還可以用于執(zhí)行方法實(shí)施例中圖5、圖7、圖8描述的Hosting CSE的各步驟,本發(fā)明實(shí)施例在此不再詳述。
本發(fā)明實(shí)施例中的中間節(jié)點(diǎn)可以基于計(jì)算機(jī)系統(tǒng)來實(shí)現(xiàn),圖6、圖7、圖8所示的方法均可在基于計(jì)算機(jī)系統(tǒng)的中間節(jié)點(diǎn)來實(shí)現(xiàn)。圖10示出了基于計(jì)算機(jī)系統(tǒng)來實(shí)現(xiàn)的中間節(jié)點(diǎn)的實(shí)施例。本實(shí)施例中中間節(jié)點(diǎn)可以包括:處理器1001、存儲器1002和通信接口1003,其中:
通信接口1003,用于與上一跳CSE通信。中間節(jié)點(diǎn)與上一跳CSE之間交互的消息均通過通信接口1003發(fā)送和接收。具體地,通信接口1003用于從上一跳CSE接收通知消息;存儲器1002用于存儲程序指令;處理器1001用于通信接口1003從上一跳CSE接收通知消息之后,調(diào)用存儲器1002中存儲的程序指令,執(zhí)行以下操作:確定所述通知消息包含最新狀態(tài)標(biāo)識;保存所述接收到的通知消息;確定本地保存的根據(jù)訂閱資源生成的通知消息中的最新通知消息;根據(jù)所述最新狀態(tài)標(biāo)識,在滿足消息發(fā)送條件時(shí)只發(fā)送所述最新通知消息。
其中,處理器1001可以是中央處理器(central processing unit,CPU)、專用集成電路(application-specific integrated circuit,ASIC)等。其中,本實(shí)施例中的中間節(jié)點(diǎn)可以包括總線1004。處理器1001、存儲器1002以及通信接口1003之間可通過總線1004連接并通信。其中,存儲器1002可以包括:隨機(jī)存取存儲器(random access memory,RAM),只讀存儲器(read-only memory,ROM),磁盤等具有存儲功能的實(shí)體。
處理器1001還可以用于執(zhí)行方法實(shí)施例中圖6、圖7、圖8描述的中間節(jié)點(diǎn)的各步驟,本發(fā)明實(shí)施例在此不再詳述。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。