郜金麗 王琴
摘要:該論文基于SIP協(xié)議設計和實現(xiàn)了一套呈現(xiàn)服務系統(tǒng),該系統(tǒng)提供了用戶注冊和發(fā)布Presence信息、接收和存儲Presence信息、查詢用戶Presence信息、訂閱用戶Presence信息和接收訂閱信息更改通知等功能。該論文實現(xiàn)的呈現(xiàn)服務系統(tǒng)可滿足人們對即時通信業(yè)務越來越高的需求。
關鍵詞:SIP協(xié)iE;訂閱與通知;呈現(xiàn)服務
中圖分類號:TP311
文獻標識碼:A
文章編號:1009-3044(2017)10-0013-03
1.可行性要求
本文主要研究SIP協(xié)議的通信過程以及基于SIP的存在服務的實現(xiàn)。在網(wǎng)絡服務中得到了廣泛的應用,然而,對業(yè)務應用還沒有發(fā)揮潛力,存在用戶信息的使用,可以開發(fā)一個基于存在的增值服務品種,從而為進一步研究實現(xiàn)基于SIP協(xié)議存在的服務是必要的。
2.系統(tǒng)總體結構設計
Presence Server系統(tǒng)主要采用多進程多線程設計,采用流水線方式實現(xiàn)進程間通信、模塊化設計思想等。該系統(tǒng)主要分為接受消息處理和消息處理過程,從存在的消息存在信息源通過管道接到接收消息的過程發(fā)送到信息處理過程、信息處理過程解析消息,根據(jù)事件消息處理的具體類型、客戶信息和發(fā)送響應,監(jiān)測到期時間線和訂閱消息處理過程中創(chuàng)建。
3.開發(fā)環(huán)境
3.1 Sun Solaris簡介
Solaris是Sun公司開發(fā)的計算機操作系統(tǒng)。它被認為是UNIX操作系統(tǒng)的派生版本之一。Solaris是目前開源軟件。在2005年6月14日,太陽將要開發(fā)的Solaris 11的源代碼開放的CDDL許可證,這是OpenSolaris開放版。
3.2 Vi簡介
有很多文本編輯器,如gedit,kwrite,OpenOffice的圖形模式,文本模式編輯vi,vim(vi的加強版)。在linux中最常用的編輯器是。vi或者是hnux的最基本的文本編輯工具,vi或雖然圖形界面編輯器沒有簡單的鼠標操作,但是vi編輯器在系統(tǒng)管理、服務器管理上,始終沒有一個圖形界面比編輯器。
4.系統(tǒng)詳細設計與實現(xiàn)
本章討論實現(xiàn)Presence服務系統(tǒng)所需要的方法以及關鍵技術,包括數(shù)據(jù)結構的設計,各個功能模塊的詳細設計等。
4.1系統(tǒng)數(shù)據(jù)結構設計
在本系統(tǒng)中數(shù)據(jù)結構詳細設計如表1所示。
4.2系統(tǒng)功能模塊設計與實現(xiàn)
4.2.1Ps系統(tǒng)初始化模塊
PS系統(tǒng)調(diào)用forko函數(shù)創(chuàng)建子進程,在創(chuàng)建子進程前父進程先初始化套接字,forko創(chuàng)建子進程后拷貝一份套接字描述符,避免通過進程間通信機制,把父進程中的套接字描述符傳送給子進程,從而使系統(tǒng)更易實現(xiàn)。在初始化套接字時,需要用戶手動配置端口等信息,系統(tǒng)自動獲取本地IP地址,端口信息展現(xiàn)給用戶,在創(chuàng)建子進程后子進程與父進程共享套接字,避免在進程間進行套接字數(shù)據(jù)通信的復雜性。
4.2PS系統(tǒng)接收消息進程功能模塊
PS系統(tǒng)接收消息進程把接收的到消息寫入管道,由PS系統(tǒng)處理消息進程進行讀取。流程圖如圖2所示。
4.3PS系統(tǒng)消息處理進程功能模塊
Ps系統(tǒng)處理消息進程首先讀取用戶初始化配置文件,存放在本地群組鏈表中,然后循環(huán)從管道讀取接收到的消息,由消息解析函數(shù)parse_header(char*buff int flag)得到消息頭,parse_bodv(char*body)函數(shù)解析到消息體,在解析得到具體信息后根據(jù)事件類型請求注冊,發(fā)布,請求訂閱及通知響應事件,主要流程圖如3所示:
4.4注冊請求事件處理模塊
注冊請求事件處理主要負責處理Presentity發(fā)布的注冊事件,判斷注冊事件合法性,添加新注冊的用戶到相應的群組鏈表中,同時更新本地配置文件。注冊請求事件處理代碼主要實
4.5發(fā)布請求事件處理模塊
發(fā)布請求事件處理主要負責處理Presentity發(fā)布的Pres-ence信息,先判斷是否群組用戶的信息已經(jīng)初始化,如果已經(jīng)初始化,則判斷Presence信息是否過期,如果沒有過期,則更新群組用戶的Presence信息。發(fā)布請求事件處理代碼所示。
4.6訂閱請求事件處理模塊
訂閱請求事件處理主要處理Watcher(觀察者)的訂閱請求,把請求信息存儲在訂閱鏈表中,當訂閱鏈表中的群組用戶信息發(fā)生改變時,監(jiān)視群組信息更新進程將根據(jù)訂閱鏈表中的信息通知訂閱的Presentity。Subscribe(訂閱)請求事件處理代碼主要實現(xiàn)代碼如下所示。
4.7信息更新線程監(jiān)視模塊
Presence信息更新線程監(jiān)視模塊主要功能是在一定時間間隔遍歷一次訂閱鏈表中群組用戶的Presence信息,監(jiān)視Pres-enee信息是否更新,如果更新則發(fā)送NOTIFY消息給訂閱了該群組用戶Presence信息的Watcher。信息更新線程監(jiān)視模塊功能代碼如下所示:
5.結束語
本系統(tǒng)在實現(xiàn)過程中采用多進程設計實現(xiàn),使用管道進行進程間通信。同時采用了多線程設計從而進一步提高資源利用率及系統(tǒng)運行效率。系統(tǒng)間數(shù)據(jù)傳輸?shù)南Ⅲw采用標準的XML格式描述,提高系統(tǒng)的實用性。由于SIP協(xié)議的影響深遠,基于SIP協(xié)議的系統(tǒng)實現(xiàn)使本系統(tǒng)生命周期更長久。