專利名稱:一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種核心網(wǎng)的資源訂閱方法,尤其涉及的是,一種在訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法。
背景技術(shù):
現(xiàn)有技術(shù)中,SIP(Session Initiation Protocol,會(huì)話發(fā)起協(xié)議,以下簡(jiǎn)稱SIP)是IETF制定的多媒體通信系統(tǒng)框架協(xié)議之一,它是一個(gè)基于文本的應(yīng)用層控制協(xié)議,獨(dú)立于底層協(xié)議,用于建立、修改和終止IP網(wǎng)上的雙方或多方多媒體會(huì)話。
SIP實(shí)現(xiàn)了訂閱/通知框架,并引入了訂閱SUBSCRIBE和通知NOTIFY方法。SUBSCRIBE方法用于訂閱,而NOTIFY方法用于傳遞一個(gè)事件的任何變化的通知。所謂訂閱通知就是,一個(gè)用戶或資源向其他資源發(fā)起訂閱,由于后者有前者感興趣的事件,之后前者會(huì)接收到有關(guān)該事件的狀態(tài)和任何變化的通知。簡(jiǎn)單流程如圖1所示,其包括以下步驟步驟(1)Subscriber(訂閱者)向Notifier(資源的擁有者)發(fā)送一個(gè)訂閱(SUBSCRIBE)消息,請(qǐng)求訂閱感興趣的資源狀態(tài);步驟(2)Notifier允許Subscriber訂閱,向Subscriber發(fā)送一個(gè)200 OK響應(yīng)確認(rèn),在Subscriber和Notifier間建立一個(gè)訂閱的對(duì)話dialog,并在Subscriber和Notifier上分別創(chuàng)建訂閱實(shí)例;步驟(3)Notifier向Subscriber發(fā)送一個(gè)NOTIFY(通知)消息,在NOTIFY消息的消息體中攜帶Subscriber訂閱的資源狀態(tài);步驟(4)Subscriber收到NOTIFY消息后,向Notifier發(fā)送一個(gè)200 OK響應(yīng),表示成功接收了NOTIFY消息。
現(xiàn)有技術(shù)的SIP訂閱通知機(jī)制是會(huì)創(chuàng)建dialog,所謂dialog也就是對(duì)話,是通信雙方之間的一種SIP關(guān)系,它提供了在通信雙方之間進(jìn)行路由和消息排序時(shí)所依據(jù)的必要的狀態(tài)信息。并且一個(gè)dialog可以關(guān)聯(lián)多個(gè)訂閱的實(shí)例,也就是說(shuō),Subscriber向Notifier發(fā)起多個(gè)訂閱請(qǐng)求,分別訂閱不同的事件包,而這些不同的訂閱請(qǐng)求將分別在Subscriber和Notifier上創(chuàng)建一一對(duì)應(yīng)的訂閱實(shí)例,所有這些訂閱的實(shí)例都關(guān)聯(lián)一個(gè)dialog。當(dāng)多個(gè)訂閱實(shí)例關(guān)聯(lián)一個(gè)dialog時(shí),每個(gè)訂閱實(shí)例由一個(gè)唯一的id值標(biāo)志,該id是由Subscriber發(fā)起每個(gè)初始訂閱請(qǐng)求時(shí)產(chǎn)生的,并通過(guò)訂閱請(qǐng)求中的Event頭域的id參數(shù)帶給Notifier。
和SIP的注冊(cè)機(jī)制類似,訂閱采用軟狀態(tài),因而需要刷新。訂閱的刷新是通過(guò)在訂閱周期內(nèi)發(fā)送一個(gè)SUBSCRIBE請(qǐng)求,并將其Expires頭域的值設(shè)定為非0的值來(lái)實(shí)現(xiàn)的。Subscriber需要針對(duì)每個(gè)訂閱的實(shí)例發(fā)送一個(gè)SUBSCRIBE請(qǐng)求來(lái)刷新訂閱。
顯然,當(dāng)Subscriber上存在多個(gè)訂閱實(shí)例時(shí),為了刷新這些訂閱實(shí)例會(huì)頻繁的發(fā)送大量的SUBSCRIBE請(qǐng)求,由此占用大量的帶寬,特別是當(dāng)Proxy作為多個(gè)Subscriber的代理向同一個(gè)Notifier訂閱時(shí),這種刷新訂閱的請(qǐng)求消息的數(shù)量會(huì)非常巨大。
因此,現(xiàn)有技術(shù)存在缺陷,而有待于改進(jìn)和發(fā)展。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,實(shí)現(xiàn)對(duì)多個(gè)訂閱實(shí)例進(jìn)行批量刷新,以解決單獨(dú)對(duì)每個(gè)訂閱實(shí)例進(jìn)行刷新而帶來(lái)的低效和帶寬浪費(fèi)之問題。
本發(fā)明的技術(shù)方案包括一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟
A、所述訂閱者創(chuàng)建攜帶第一列表信息,并發(fā)送給所述通知者;B、所述通知者根據(jù)收到的所述訂閱者的第一列表信息,通過(guò)響應(yīng)消息攜帶所述通知者的第二列表信息,并根據(jù)第一列表信息刷新所述通知者本地的訂閱實(shí)例;C、所述訂閱者根據(jù)收到的所述通知者的第二列表信息,刷新所述訂閱者本地的訂閱實(shí)例。
所述的方法,其中,所述訂閱者的第一列表信息通過(guò)批量刷新消息的頭域或消息體傳輸。
所述的方法,其中,批量刷新消息是已有的會(huì)話發(fā)起協(xié)議消息,或是為批量刷新而擴(kuò)展的一個(gè)新的會(huì)話發(fā)起協(xié)議消息。
所述的方法,其中,所述通知者的第二列表信息通過(guò)響應(yīng)消息的頭域或消息體傳輸。
所述的方法,其中,在基于同一對(duì)話時(shí),所述第一列表信息和所述第二列表信息中包括對(duì)應(yīng)所述訂閱者或所述通知者的訂閱實(shí)例標(biāo)識(shí)號(hào)。
所述的方法,其中,在基于不同的對(duì)話時(shí),所述第一列表信息和所述第二列表信息中包括對(duì)應(yīng)所述訂閱者或所述通知者的對(duì)話呼叫標(biāo)識(shí)號(hào)和各對(duì)話的訂閱實(shí)例標(biāo)識(shí)號(hào)。
所述的方法,其中,所述第二列表信息還可設(shè)置為僅包括與所述訂閱者匹配的對(duì)話呼叫標(biāo)識(shí)號(hào)或/和各該對(duì)話對(duì)應(yīng)的與所述訂閱者不匹配訂閱實(shí)例標(biāo)識(shí)號(hào)。
一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟A1、所述訂閱者創(chuàng)建第一列表信息的頭域,并將該頭域加入批量刷新消息中,所述第一列表信息中包括本地關(guān)聯(lián)同一個(gè)對(duì)話的所有處于活動(dòng)狀態(tài)的訂閱實(shí)例的標(biāo)識(shí)號(hào);B1、所述通知者收到帶有第一列表信息頭域的批量刷新消息,根據(jù)該批量刷新消息匹配到本地的對(duì)話,從其列表信息頭域中逐一取出訂閱實(shí)例標(biāo)識(shí)號(hào)與本地匹配對(duì)話中關(guān)聯(lián)的訂閱實(shí)例標(biāo)識(shí)號(hào)比較,并創(chuàng)建一個(gè)第二列表信息頭域,將比較后不相同的標(biāo)識(shí)號(hào)加入其中,并刷新相同標(biāo)識(shí)號(hào)對(duì)應(yīng)的訂閱實(shí)例。
所述的方法,其中,所述方法還包括C1、所述通知者創(chuàng)建響應(yīng)消息,將上述產(chǎn)生的第二列表信息頭域加入該響應(yīng)消息中;D1、所述訂閱者接收到該響應(yīng)消息,將本地的訂閱實(shí)例標(biāo)識(shí)號(hào)逐一取出與該響應(yīng)消息中的第二列表信息頭域中訂閱實(shí)例標(biāo)識(shí)號(hào)比較,若相同,則由所述訂閱者將該標(biāo)識(shí)號(hào)對(duì)應(yīng)的本地訂閱實(shí)例釋放,若不相同則刷新該標(biāo)識(shí)號(hào)對(duì)應(yīng)的本地訂閱實(shí)例。
所述的方法,其中,所述步驟B1中對(duì)于放入第二列表信息中的所述通知者的本地訂閱實(shí)例,所述通知者將其對(duì)應(yīng)的訂閱實(shí)例釋放。
一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟A2、所述訂閱者創(chuàng)建第一列表信息的頭域,并將該頭域加入批量刷新消息中,所述第一列表信息中包括本地關(guān)聯(lián)多個(gè)對(duì)話的所有處于活動(dòng)狀態(tài)的訂閱實(shí)例的呼叫標(biāo)識(shí)號(hào);B2、所述通知者收到帶有第一列表信息頭域的批量刷新消息,根據(jù)該批量刷新消息中的呼叫標(biāo)識(shí)號(hào)匹配到本地的多個(gè)對(duì)話,并刷新所匹配到的多個(gè)會(huì)話的全部訂閱實(shí)例,將不能匹配的會(huì)話的呼叫標(biāo)識(shí)號(hào)放入第二列表信息頭域,通過(guò)響應(yīng)消息發(fā)送給所述訂閱者,所述訂閱者刷新本地的訂閱實(shí)例。
所述的方法,其中,所述方法還包括C2、所述訂閱者收到響應(yīng)消息中的所述第二列表信息頭域,解析其中的呼叫標(biāo)識(shí)號(hào)對(duì)應(yīng)的對(duì)話,將這些對(duì)話對(duì)應(yīng)的訂閱實(shí)例釋放,并刷新第一列表信息中不等于第二列表信息的其他對(duì)話對(duì)應(yīng)的訂閱實(shí)例。
一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟A3、所述訂閱者將需要批量刷新的訂閱實(shí)例標(biāo)識(shí)號(hào)和其關(guān)聯(lián)的對(duì)話的呼叫標(biāo)識(shí)號(hào)放入一個(gè)消息體中,并將該列表保存一份在本地,記為第一列表信息;B3、所述通知者從該消息體中逐一取出呼叫標(biāo)識(shí)號(hào),匹配本地的對(duì)話,若能匹配則保存對(duì)應(yīng)呼叫標(biāo)識(shí)號(hào)到第二列表信息,并從該消息體中逐一取出與該呼叫標(biāo)識(shí)號(hào)關(guān)聯(lián)的訂閱實(shí)例的標(biāo)識(shí)號(hào),與匹配到的通知者本地對(duì)話所關(guān)聯(lián)的訂閱實(shí)例標(biāo)識(shí)號(hào)比較,若相等則刷新該標(biāo)識(shí)號(hào)對(duì)應(yīng)的訂閱實(shí)例,否則保存該訂閱實(shí)例標(biāo)識(shí)號(hào)到第二列表信息;C3、所述通知者將第二列表信息放入響應(yīng)消息的消息體中,發(fā)送給所述訂閱者,用于刷新其各訂閱實(shí)例。
所述的方法,其中,所述刷新過(guò)程還包括D3、所述訂閱者接收到響應(yīng)消息,從本地保存的第一列表信息中逐一取出呼叫標(biāo)識(shí)號(hào),與響應(yīng)消息的消息體中攜帶的第二列表信息中的呼叫標(biāo)識(shí)號(hào)比較;E3、若不相等,則釋放該呼叫標(biāo)識(shí)號(hào)對(duì)應(yīng)的對(duì)話及其關(guān)聯(lián)的訂閱實(shí)例;若相等,再逐一從該第二列表信息中取出關(guān)聯(lián)該呼叫標(biāo)識(shí)號(hào)的訂閱實(shí)例,與本地保存的第一列表信息中對(duì)應(yīng)的關(guān)聯(lián)該呼叫標(biāo)識(shí)號(hào)的訂閱實(shí)例標(biāo)識(shí)號(hào)比較;F3、若相等則釋放其對(duì)應(yīng)的訂閱實(shí)例,并刪除該第一列表信息中該訂閱實(shí)例的標(biāo)識(shí)號(hào);G3、處理完第二列表信息后,刷新第一列表信息中剩余的所有訂閱實(shí)例標(biāo)識(shí)號(hào)對(duì)應(yīng)的訂閱實(shí)例。
所述的方法,其中所述的消息體的編碼格式為文本或XML格式。
本發(fā)明所提供的一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,由于采用批量刷新方式,提高了刷新訂閱實(shí)例的效率,減少了刷新訂閱的消息數(shù)量,并降低了對(duì)網(wǎng)絡(luò)帶寬的消耗。
圖1為現(xiàn)有技術(shù)的訂閱及刷新的流程示意圖;圖2為本發(fā)明方法的批量刷新的流程示意圖;圖3為本發(fā)明方法的批量刷新的第二實(shí)施例的流程示意圖。
具體實(shí)施例方式
以下結(jié)合附圖,將對(duì)本發(fā)明的各較佳實(shí)施例進(jìn)行較為詳細(xì)的說(shuō)明。
本發(fā)明的一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,實(shí)現(xiàn)了一種對(duì)多個(gè)訂閱實(shí)例進(jìn)行批量刷新的機(jī)制。
本發(fā)明方法新擴(kuò)展一個(gè)頭域,用于傳遞需要刷新的訂閱實(shí)例的標(biāo)識(shí)號(hào)ID或多個(gè)對(duì)話dialog的呼叫標(biāo)識(shí)號(hào)Call-ID的列表,比如命名為Sub_IDList,其格式定義可以但不限于如下Sub_IDList=(″Sub_IDList″)HCOLON(sub-idparam*(COMMA sub-idparam))sub-idparam=sub-id/sub-idset/callidsub-id=tokensub-idset=idmin″|″idmaxidmin=1*DIGITidmax=1*DIGITtoken=1*(alphanum/″-″/″.″/″!″/″%″/″*″/″_″/″+″/″`″/″′″/″~″)在Sub_IDList中定義了多個(gè)sub-idparam,每個(gè)sub-idparam由逗號(hào)分隔,sub-idparam代表一個(gè)sub-id或sub-idset,sub-id是一個(gè)字符串,同訂閱實(shí)例的id定義相同,sub-idset表示了一個(gè)數(shù)字的范圍,兩個(gè)數(shù)字間用豎號(hào)“|”分隔,且idmin的值必須小于idmax的值,如6到21,表示為“6|21”。callid表示匹配一個(gè)dialog的Call-ID的值,定義同RFC3261標(biāo)準(zhǔn)。本發(fā)明方案規(guī)定,Sub_IDList中不能同時(shí)存在訂閱實(shí)例的標(biāo)識(shí)號(hào)ID和Call-ID,即要么是基于同一對(duì)話dialog的標(biāo)識(shí)號(hào)ID,要么是基于不同對(duì)話dialog的呼叫標(biāo)識(shí)號(hào)Call-ID。
為了使訂閱者與通知者能協(xié)商使用訂閱的批量刷新機(jī)制,還需要擴(kuò)展一個(gè)SIP的option-tag,比如命名為“sub-batch-update”,用于在訂閱者發(fā)起的批量刷新消息的Require頭域攜帶,表示訂閱者需要通知者支持訂閱的批量刷新。
本發(fā)明方法并不限定能攜帶Sub_IDList頭域的SIP消息,這樣的消息可以是已有的消息,也可以是專為批量刷新訂閱所擴(kuò)展的一個(gè)新的消息。對(duì)于刷新關(guān)聯(lián)同一dialog的訂閱實(shí)例,使用該dialog內(nèi)的消息(也就是關(guān)聯(lián)dialog的消息);對(duì)于刷新關(guān)聯(lián)不同diaolog的訂閱實(shí)例,使用dialog外的消息(也就是不關(guān)聯(lián)任何dialog的消息)。作為描述實(shí)施例會(huì)用到的消息,對(duì)于刷新關(guān)聯(lián)同一dialog的訂閱實(shí)例,可使用UPDATE消息;對(duì)于刷新關(guān)聯(lián)不同diaolog的訂閱實(shí)例,可使用dialog外的SUBSCRIBE消息。
以下用UPDATE消息作為攜帶Sub_IDList頭域的載體為例,來(lái)描述本發(fā)明方法對(duì)Sub_IDList頭域處理過(guò)程所述Subscriber創(chuàng)建第一列表信息頭域,記為Sub_IDList,將該頭域加入U(xiǎn)PDATE消息中,將本地關(guān)聯(lián)同一個(gè)dialog的所有處于活動(dòng)狀態(tài)的訂閱實(shí)例的id加入到Sub_IDList頭域中,并將Sub_IDList頭域在本地保留一份,記為本地Sub_IDList,對(duì)于連續(xù)的數(shù)字形式的訂閱實(shí)例id,可以采用范圍的表現(xiàn)方式,見Sub_IDList頭域的定義。
所述Notifier收到帶有Sub_IDList頭域的UPDATE消息,根據(jù)UPDATE消息匹配到本地一dialog,從Sub_IDList頭域中逐一取出訂閱實(shí)例id與本地匹配dialog中關(guān)聯(lián)的訂閱實(shí)例id比較,并創(chuàng)建一個(gè)新的Sub_IDList頭域,即第二列表信息頭域,記為Sub_IDList’,將比較后不相同的id加入其中,并刷新比較相同的id對(duì)應(yīng)的訂閱實(shí)例,對(duì)于連續(xù)的數(shù)字形式的id,可以采用范圍的表現(xiàn)方式。
所述Notifier創(chuàng)建UPDATE的響應(yīng)消息,將上述產(chǎn)生的Sub_IDList’作為新的Sub_IDList頭域加入U(xiǎn)PDATE的響應(yīng)消息中;Subscriber接收到UPDATE的響應(yīng)消息,從Sub_IDList’頭域中逐一取出訂閱實(shí)例id與本地Sub_IDList比較,若相同,則釋放id對(duì)應(yīng)的本地訂閱實(shí)例,并刪除本地Sub_IDList中對(duì)應(yīng)的id。處理完響應(yīng)消息中的Sub_IDList’頭域中的id后,逐一將本地Sub_IDList中剩余的id關(guān)聯(lián)的訂閱實(shí)例刷新。
下面通過(guò)一個(gè)具體的實(shí)施例來(lái)說(shuō)明,新擴(kuò)展的兩個(gè)頭域在訂閱的批量刷新中的用法,以及批量刷新機(jī)制的原理,以清楚說(shuō)明本發(fā)明方法的有益效果。
本發(fā)明的該實(shí)施例中,假設(shè)Subscriber向Notifier發(fā)送了關(guān)聯(lián)同一個(gè)dialog的多個(gè)訂閱請(qǐng)求,分別在Subscriber和Notifier上產(chǎn)生了相應(yīng)數(shù)量的訂閱實(shí)例,這些實(shí)例的id值有些是純數(shù)字形式的字符串,有些是數(shù)字字母的字符串,在Subscriber和Notifier間一一對(duì)應(yīng)。過(guò)了一段時(shí)間后,由于網(wǎng)絡(luò)異常等原因,造成了Subscriber和Notifier上的訂閱實(shí)例id不對(duì)應(yīng)的情況,Subscriber上訂閱實(shí)例id為{1|50,55,60,68,80|200,a1,wwug,qerr};Notifier上訂閱實(shí)例id為{20|50,68,80,90|190,a1,qerr}。Subscriber向Notifier發(fā)起訂閱的批量刷新,使用UPDATE作為批量刷新消息,并分兩次刷新完所有的ID。
如圖2所示的,本發(fā)明方法的基于同一dialog的批量刷新流程包括步驟A、所述Subscriber發(fā)起訂閱的批量刷新,將本地需刷新的部分ID{1|50,55,60,68},放入Sub_IDList頭域,并保存一份在本地,記為本地Sub_IDList,由UPDATE消息攜帶,發(fā)送到Notifier;B、Notifier收到Subscriber發(fā)起的訂閱的批量刷新請(qǐng)求,從Sub_IDList頭域中逐個(gè)取出id與本地比較,若相等,則刷新該id對(duì)應(yīng)的訂閱實(shí)例;不相等,則將該ID保存到一個(gè)新的Sub_IDList頭域中。在處理完所有id后,得到一個(gè)新的Sub_IDList頭域?yàn)閧1|19,55,60},將新的Sub_IDList頭域通過(guò)200 OK傳遞給Subscriber;Subscriber收到200 OK后,從中的Sub_IDList頭域逐個(gè)取出id與Subscriber中本地Sub_IDList中的id比較,若相等則釋放該id對(duì)應(yīng)的訂閱實(shí)例,并刪除本地Sub_IDList中對(duì)應(yīng)的id;最后,逐一將本地Sub_IDList{20|50,68}中剩余的id關(guān)聯(lián)的訂閱實(shí)例刷新。
C、Subscriber將本地剩余部分需刷新的ID{80|200,a1,wwug,qerr},放入Sub_IDList頭域,并保存一份在本地,記為本地Sub_IDList,由UPDATE消息攜帶,發(fā)送到Notifier;D、Notifier收到Subscriber發(fā)起的訂閱的批量刷新請(qǐng)求,從Sub_IDList頭域中逐個(gè)取出id與本地比較,若相等,則刷新該id對(duì)應(yīng)的訂閱實(shí)例;不相等,則將該id保存到一個(gè)新的Sub_IDList頭域中。在處理完所有id后,得到一個(gè)新的Sub_IDList頭域?yàn)閧81|89,191|200,wwug},將新的Sub_IDList頭域通過(guò)200OK傳遞給Subscriber;Subscriber收到200 OK后,從中的Sub_IDList頭域逐個(gè)取出ID與Subscriber中本地Sub_IDList中的id比較,若相等則釋放該id對(duì)應(yīng)的訂閱實(shí)例,并刪除本地Sub_IDList中對(duì)應(yīng)的ID;最后,逐一將本地Sub_IDList{80,90|190,a1,qerr}中剩余的id關(guān)聯(lián)的訂閱實(shí)例刷新。
本發(fā)明方法的關(guān)鍵點(diǎn)之一就是通過(guò)在請(qǐng)求消息及其響應(yīng)消息中用一個(gè)頭域攜帶基于同一dialog的訂閱實(shí)例ID或基于不同dialog的Call-ID在Subscriber和Notifier間交互,完成Subscriber和Notifier各自本地訂閱實(shí)例的刷新。
本發(fā)明基于不同dialog的刷新訂閱過(guò)程如圖3所示,其都關(guān)聯(lián)多個(gè)dialog,假設(shè)Subscriber向Notifier發(fā)送了四個(gè)訂閱請(qǐng)求,每個(gè)訂閱請(qǐng)求分別關(guān)聯(lián)一個(gè)dialog,分別Subscriber和Notifier上產(chǎn)生了四個(gè)的訂閱實(shí)例,關(guān)聯(lián)四個(gè)不同的dialog,這四個(gè)dialog的Call-ID為{843817637684230@998sdasdh09,wwre42gd30@9943gdh09,84381ffjj5i4230@23drtasdh09,adf54684230@55hdasdre}。Subscriber向Notifier發(fā)起訂閱的批量刷新,使用不關(guān)聯(lián)任何dialog的SUBSCRIBE作為批量刷新消息。其基本步驟包括
A2、Subscriber發(fā)起訂閱的批量刷新,通過(guò)一個(gè)不關(guān)聯(lián)任何dialog而是關(guān)聯(lián)多個(gè)dialog的SUBSCRIBE消息攜帶第一列表信息Sub_IDList的頭域,將本地需刷新的訂閱實(shí)例對(duì)應(yīng)的dailog的Call-ID{843817637684230@998sdasdh09,wwre42gd30@9943gdh09,84381ffjj5i4230@23drtasdh09,adf54684230@55hdasdre},放入Sub_IDList頭域,并保存一份在本地,記為L(zhǎng)ocalIDList,發(fā)送到Notifier;B2、Notifier收到Subscriber發(fā)起的訂閱的批量刷新請(qǐng)求,從Sub_IDList頭域中逐個(gè)取出呼叫標(biāo)識(shí)號(hào)Call-ID匹配本地dialog,并刷新匹配到的dialog所關(guān)聯(lián)的全部訂閱實(shí)例,將不能匹配dialog的Call-ID放入新的Sub_IDList頭域,如圖3中所示的四個(gè)Call-ID都能匹配到本地dialog,新的Sub_IDList頭域?yàn)榭眨ㄟ^(guò)200 OK發(fā)送給Subscriber;Subscriber取出200 OK攜帶的Sub_IDList頭域,發(fā)現(xiàn)是空值,因此直接將本地LocalIDList中的Call-ID逐個(gè)取出,匹配到本地dialog,并刷新dialog所關(guān)聯(lián)的訂閱實(shí)例。
由于SIP的請(qǐng)求消息和響應(yīng)消息的消息體可以用于傳遞任何數(shù)據(jù),因此,另一種存在的技術(shù)方案是通過(guò)請(qǐng)求消息和響應(yīng)消息的消息體來(lái)攜帶訂閱實(shí)例的id或dialog的Call-ID。消息體的編碼格式可以采用文本、XML等各種方式,在此不一一舉全,關(guān)鍵點(diǎn)是消息體的內(nèi)容包括了訂閱實(shí)例標(biāo)識(shí)號(hào)id或dialog的Call-ID,如圖2(1)至(4)中采用Sub_IDList頭域攜帶的內(nèi)容,用XML編碼格式的消息體,其步驟包括A1、訂閱者將需要批量刷新的訂閱實(shí)例ID和這些ID關(guān)聯(lián)的dialog的Call-ID放入一個(gè)定義的消息體的格式,在此采用上述的XML的訂閱實(shí)例ID列表的消息格式,通過(guò)一個(gè)不關(guān)聯(lián)任何dialog的消息發(fā)送給通知者,并將該列表保存一份在本地,記為L(zhǎng)ocalIDList。
B1、所述通知者先從消息體中逐一取出Call-ID,匹配本地的dialog,若能匹配,則保存Call-ID,再?gòu)南Ⅲw中逐一取出與該Call-ID關(guān)聯(lián)的訂閱實(shí)例的ID,將取出的ID與匹配到的dialog所關(guān)聯(lián)的訂閱實(shí)例ID比較,若相等則刷新ID對(duì)應(yīng)的訂閱實(shí)例,不相等,則保存該訂閱實(shí)例ID。
C1、如上重復(fù)處理完消息體中的所有Call-ID和訂閱實(shí)例ID,將處理過(guò)程中保存的Call-ID和訂閱實(shí)例ID取出,構(gòu)造一個(gè)新的訂閱實(shí)例ID列表,記為RemoteIDList,放入200 OK的消息體中,發(fā)送給訂閱者。
D1、訂閱者接收到200 OK,先從本地保存的LocalIDList中逐一取出Call-ID,與響應(yīng)消息消息體攜帶的RemoteIDList中的Call-ID比較,若相等,則釋放Call-ID對(duì)應(yīng)dialog及其關(guān)聯(lián)的訂閱實(shí)例;若不相等,再逐一從RemoteIDList中取出關(guān)聯(lián)該Call-ID的訂閱實(shí)例ID,與本地保存的LocalIDList對(duì)應(yīng)的關(guān)聯(lián)該Call-ID的訂閱實(shí)例ID較,若相等則釋放其對(duì)應(yīng)的訂閱實(shí)例,并刪除LocalIDLis中該訂閱實(shí)例ID。
E1、處理完RemoteIDList中關(guān)聯(lián)該Call-ID的所有訂閱實(shí)例ID后,將LocallDList中關(guān)聯(lián)該Call-ID的剩余的所有訂閱實(shí)例ID對(duì)應(yīng)的訂閱實(shí)例刷新。如上重復(fù)處理完本地保存的LocalIDList中所有的Call-ID。
本發(fā)明方法的采用XML的編碼方式定義一個(gè)訂閱實(shí)例ID列表的消息格式,描述如下<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<Subidlist xmlns=″urn:ietf:params:xml:ns:subidlst″xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<dialog callid=>
<id></id>
…<idset start=end=/>
…</dialog>
…
</Subidlist>
其中,<Subidlist>元素代表根元素,是訂閱實(shí)例列表的起始點(diǎn),在根元素下可以包含至少一個(gè)<dialog>元素;<dialog>元素代表訂閱實(shí)例關(guān)聯(lián)的dialog,其有一屬性值callid,表示dialog的Call-ID,可以根據(jù)該屬性匹配到一個(gè)dialog,<dialog>元素可以包含至少一個(gè)<id>或<idset>,表示與dialog關(guān)聯(lián)的訂閱實(shí)例的ID;<id>元素代表一個(gè)訂閱實(shí)例的ID;<idset>元素代表訂閱實(shí)例的ID的區(qū)間范圍,該區(qū)間范圍的值要求必須是步長(zhǎng)為1的連續(xù)的正整數(shù)。
以下將對(duì)該實(shí)施例中的各消息體進(jìn)行示例說(shuō)明,如圖2,其中,第一個(gè)刷新關(guān)聯(lián)一個(gè)dialog的訂閱實(shí)例的消息的消息體示例為<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<Subidlist xmlns=″urn:ietf:params:xml:ns:subidlst″xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<dialog callid=″wwre42gd30@9943gdh09″>
<id>55</id>
<id>60</id>
<id>68</id>
<idset start=1end=50/>
</dialog>
</Subidlist>
第一個(gè)200 OK的消息體為<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<Subidlist xmlns=″urn:ietf:params:xml:ns:subidlst″xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<dialog callid=″wwre42gd30@9943gdh09″>
<id>55</id>
<id>60</id>
<idset start=1 end=19/>
</dialog>
</Subidlist>
第二個(gè)刷新關(guān)聯(lián)一個(gè)dialog的訂閱實(shí)例的消息的消息體示例為<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<Subidlist xmlns=″urn:ietf:params:xml:ns:subidlst″xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<dialog callid=″wwre42gd30@9943gdh09″>
<id>a1</id>
<id>wwug</id>
<id>qerr</id>
<idset start=80 end=200/>
</dialog>
</Subidlist>
第二個(gè)200 OK的消息體為<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<Subidlist xmlns=″urn:ietf:params:xml:ns:subidlst″xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<dialog callid=″wwre42gd30@9943gdh09″>
<id>wwug</id>
<idset start=81 end=89/>
<idset start=191 end=200/>
</dialog>
</Subidlist>
如圖3所示的刷新關(guān)聯(lián)多個(gè)dialog訂閱實(shí)例的消息體示例為<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<Subidlist xmlns=″urn:ietf:params:xml:ns:subidlst″xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<dialog callid=″843817637684230@998sdasdh09″>
<id>80</id>
</dialog>
<dialog callid=″wwre42gd30@9943gdh09″>
<id>aawe</id>
</dialog>
<dialog callid=″84381ffjj5i4230@23drtasdh09″>
<id>g5623</id>
</dialog>
<dialog callid=″adf54684230@55hdasdre″>
<id>2311</id>
</dialog>
</Subidlist>
其200 OK響應(yīng)消息的消息體為<?xml version=″1.0″e(cuò)ncoding=″UTF-8″?>
<Subidlist xmlns=″urn:ietf:params:xml:ns:subidlst″xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<dialog callid=″843817637684230@998sdasdh09″>
</dialog>
<dialog callid=″wwre42gd30@9943gdh09″>
</dialog>
<dialog callid=″84381ffjj5i4230@23drtasdh09″>
</dialog>
<dialog callid=″adf54684230@55hdasdre″>
</dialog>
</Subidlist>
在上述流程中,訂閱者和通知者的處理流程與前述實(shí)施例的區(qū)別在于,從列表頭域只能獲得dialog的Call-ID(由該技術(shù)方案決定的),因此只能根據(jù)Call-ID將匹配dialog關(guān)聯(lián)的所有訂閱實(shí)例刷新,而本發(fā)明方案中,可以通過(guò)消息體攜帶dialog的Call-ID和訂閱實(shí)例ID,因此可以選擇刷新dialog中的部分訂閱實(shí)例。
當(dāng)然,作為一個(gè)完整的實(shí)施例,還需要為新的消息體格式其定義一個(gè)Content-Type的類型。比如,根據(jù)SIP的語(yǔ)法要求,可以定義為application/sub-idlist+xml。
與第一實(shí)施例的前述方案不同的是,本發(fā)明的該方案通過(guò)消息體可同時(shí)攜帶訂閱實(shí)例id和dialog的Call-ID,可將前方案的兩種情況統(tǒng)一起來(lái),并且消息體的大小不受限制,是一種比前述方案更優(yōu)的方案。
當(dāng)然,本發(fā)明方法中的消息體內(nèi)容可以只包括訂閱實(shí)例id,這樣所有的訂閱實(shí)例id關(guān)聯(lián)同一個(gè)dialog,可以通過(guò)一個(gè)關(guān)聯(lián)dialog的消息來(lái)傳遞,如UPDATE,這就與前述方案相同,在此不在贅述。
綜上,本發(fā)明方法提高了刷新訂閱實(shí)例的效率,減少了刷新訂閱的消息數(shù)量,降低了對(duì)網(wǎng)絡(luò)帶寬的消耗,顯然具有現(xiàn)有技術(shù)無(wú)法達(dá)到的效果。
應(yīng)當(dāng)理解的是,上述針對(duì)具體實(shí)施例的描述較為詳細(xì),并不能因此而認(rèn)為是對(duì)本發(fā)明專利保護(hù)范圍的限制,本發(fā)明的專利保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟A、所述訂閱者創(chuàng)建攜帶第一列表信息,并發(fā)送給所述通知者;B、所述通知者根據(jù)收到的所述訂閱者的第一列表信息,通過(guò)響應(yīng)消息攜帶所述通知者的第二列表信息,并根據(jù)第一列表信息刷新所述通知者本地的訂閱實(shí)例;C、所述訂閱者根據(jù)收到的所述通知者的第二列表信息,刷新所述訂閱者本地的訂閱實(shí)例。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述訂閱者的第一列表信息通過(guò)批量刷新消息的頭域或消息體傳輸。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述批量刷新消息是已有的會(huì)話發(fā)起協(xié)議消息,或是為批量刷新而擴(kuò)展的一個(gè)新的會(huì)話發(fā)起協(xié)議消息。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述通知者的第二列表信息通過(guò)響應(yīng)消息的頭域或消息體傳輸。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,在基于同一對(duì)話時(shí),所述第一列表信息和所述第二列表信息中包括對(duì)應(yīng)所述訂閱者或所述通知者的訂閱實(shí)例標(biāo)識(shí)號(hào)。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,在基于不同的對(duì)話時(shí),所述第一列表信息和所述第二列表信息中包括對(duì)應(yīng)所述訂閱者或所述通知者的對(duì)話呼叫標(biāo)識(shí)號(hào)和各對(duì)話的訂閱實(shí)例標(biāo)識(shí)號(hào)。
7.根據(jù)權(quán)利要求5或6所述的方法,其特征在于,所述第二列表信息還可設(shè)置為僅包括與所述訂閱者匹配的對(duì)話呼叫標(biāo)識(shí)號(hào)或/和各該對(duì)話對(duì)應(yīng)的與所述訂閱者不匹配訂閱實(shí)例標(biāo)識(shí)號(hào)。
8.一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟A1、所述訂閱者創(chuàng)建第一列表信息的頭域,并將該頭域加入批量刷新消息中,所述第一列表信息中包括本地關(guān)聯(lián)同一個(gè)對(duì)話的所有處于活動(dòng)狀態(tài)的訂閱實(shí)例的標(biāo)識(shí)號(hào);B1、所述通知者收到帶有第一列表信息頭域的批量刷新消息,根據(jù)該批量刷新消息匹配到本地的對(duì)話,從其列表信息頭域中逐一取出訂閱實(shí)例標(biāo)識(shí)號(hào)與本地匹配對(duì)話中關(guān)聯(lián)的訂閱實(shí)例標(biāo)識(shí)號(hào)比較,并創(chuàng)建一個(gè)第二列表信息頭域,將比較后不相同的標(biāo)識(shí)號(hào)加入其中,并刷新相同標(biāo)識(shí)號(hào)對(duì)應(yīng)的訂閱實(shí)例。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述方法還包括C1、所述通知者創(chuàng)建響應(yīng)消息,將上述產(chǎn)生的第二列表信息頭域加入該響應(yīng)消息中;D1、所述訂閱者接收到該響應(yīng)消息,將本地的訂閱實(shí)例標(biāo)識(shí)號(hào)逐一取出與該響應(yīng)消息中的第二列表信息頭域中訂閱實(shí)例標(biāo)識(shí)號(hào)比較,若相同,則由所述訂閱者將該標(biāo)識(shí)號(hào)對(duì)應(yīng)的本地訂閱實(shí)例釋放,若不相同則刷新該標(biāo)識(shí)號(hào)對(duì)應(yīng)的本地訂閱實(shí)例。
10.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述步驟B1中對(duì)于放入第二列表信息中的所述通知者的本地訂閱實(shí)例,所述通知者將其對(duì)應(yīng)的訂閱實(shí)例釋放。
11.一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟A2、所述訂閱者創(chuàng)建第一列表信息的頭域,并將該頭域加入批量刷新消息中,所述第一列表信息中包括本地關(guān)聯(lián)多個(gè)對(duì)話的所有處于活動(dòng)狀態(tài)的訂閱實(shí)例的呼叫標(biāo)識(shí)號(hào);B2、所述通知者收到帶有第一列表信息頭域的批量刷新消息,根據(jù)該批量刷新消息中的呼叫標(biāo)識(shí)號(hào)匹配到本地的多個(gè)對(duì)話,并刷新所匹配到的多個(gè)會(huì)話的全部訂閱實(shí)例,將不能匹配的會(huì)話的呼叫標(biāo)識(shí)號(hào)放入第二列表信息頭域,通過(guò)響應(yīng)消息發(fā)送給所述訂閱者,所述訂閱者刷新本地的訂閱實(shí)例。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述方法還包括C2、所述訂閱者收到響應(yīng)消息中的所述第二列表信息頭域,解析其中的呼叫標(biāo)識(shí)號(hào)對(duì)應(yīng)的對(duì)話,將這些對(duì)話對(duì)應(yīng)的訂閱實(shí)例釋放,并刷新第一列表信息中不等于第二列表信息的其他對(duì)話對(duì)應(yīng)的訂閱實(shí)例。
13.一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括步驟A3、所述訂閱者將需要批量刷新的訂閱實(shí)例標(biāo)識(shí)號(hào)和其關(guān)聯(lián)的對(duì)話的呼叫標(biāo)識(shí)號(hào)放入一個(gè)消息體中,并將該列表保存一份在本地,記為第一列表信息;B3、所述通知者從該消息體中逐一取出呼叫標(biāo)識(shí)號(hào),匹配本地的對(duì)話,若能匹配則保存對(duì)應(yīng)呼叫標(biāo)識(shí)號(hào)到第二列表信息,并從該消息體中逐一取出與該呼叫標(biāo)識(shí)號(hào)關(guān)聯(lián)的訂閱實(shí)例的標(biāo)識(shí)號(hào),與匹配到的通知者本地對(duì)話所關(guān)聯(lián)的訂閱實(shí)例標(biāo)識(shí)號(hào)比較,若相等則刷新該標(biāo)識(shí)號(hào)對(duì)應(yīng)的訂閱實(shí)例,否則保存該訂閱實(shí)例標(biāo)識(shí)號(hào)到第二列表信息;C3、所述通知者將第二列表信息放入響應(yīng)消息的消息體中,發(fā)送給所述訂閱者,用于刷新其各訂閱實(shí)例。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述刷新過(guò)程還包括D3、所述訂閱者接收到響應(yīng)消息,從本地保存的第一列表信息中逐一取出呼叫標(biāo)識(shí)號(hào),與響應(yīng)消息的消息體中攜帶的第二列表信息中的呼叫標(biāo)識(shí)號(hào)比較;E3、若不相等,則釋放該呼叫標(biāo)識(shí)號(hào)對(duì)應(yīng)的對(duì)話及其關(guān)聯(lián)的訂閱實(shí)例;若相等,再逐一從該第二列表信息中取出關(guān)聯(lián)該呼叫標(biāo)識(shí)號(hào)的訂閱實(shí)例,與本地保存的第一列表信息中對(duì)應(yīng)的關(guān)聯(lián)該呼叫標(biāo)識(shí)號(hào)的訂閱實(shí)例標(biāo)識(shí)號(hào)比較;F3、若相等則釋放其對(duì)應(yīng)的訂閱實(shí)例,并刪除該第一列表信息中該訂閱實(shí)例的標(biāo)識(shí)號(hào);G3、處理完第二列表信息后,刷新第一列表信息中剩余的所有訂閱實(shí)例標(biāo)識(shí)號(hào)對(duì)應(yīng)的訂閱實(shí)例。
15.根據(jù)權(quán)利要求13或14所述的方法,其特征在于,所述的消息體的編碼格式為文本或XML格式。
全文摘要
本發(fā)明公開了一種訂閱機(jī)制中實(shí)現(xiàn)批量刷新的方法,用于通知者與訂閱者之間的交互,其包括所述訂閱者創(chuàng)建第一列表信息的頭域,并將該頭域加入批量刷新消息中,所述第一列表信息中包括本地活動(dòng)狀態(tài)的訂閱實(shí)例的標(biāo)識(shí)號(hào);所述通知者從其列表信息頭域中逐一取出訂閱實(shí)例標(biāo)識(shí)號(hào)與本地訂閱實(shí)例標(biāo)識(shí)號(hào)比較,并創(chuàng)建一個(gè)第二列表信息頭域,并刷新該標(biāo)識(shí)號(hào)對(duì)應(yīng)的訂閱實(shí)例。本發(fā)明方法由于采用批量刷新方式,提高了刷新訂閱實(shí)例的效率,減少了刷新訂閱的消息數(shù)量,并降低了對(duì)網(wǎng)絡(luò)帶寬的消耗。
文檔編號(hào)H04L29/06GK1984127SQ20051012088
公開日2007年6月20日 申請(qǐng)日期2005年12月16日 優(yōu)先權(quán)日2005年12月16日
發(fā)明者王嘯 申請(qǐng)人:華為技術(shù)有限公司