徐偉
摘 要:HTTP協(xié)議是一種無狀態(tài)的通訊協(xié)議,適用于一次性的同步傳輸。但許多應(yīng)用場景(如Web聊天室、Web Phone)需要使用持續(xù)性的同步傳輸,針對此問題,采用AJAX技術(shù)搭配SIP協(xié)議,讓客戶端與服務(wù)器維持一定的持續(xù)性作用狀態(tài),而服務(wù)器端程序則采用異步呼叫技術(shù),呼叫以SIP協(xié)議為基礎(chǔ)構(gòu)建的Web Service,如此處理可以大幅提升服務(wù)器端程序?qū)τ脩舻捻憫?yīng)速度,并提升網(wǎng)站負(fù)載能力。
關(guān)鍵詞:互聯(lián)網(wǎng) 異步通信 信息安全
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2017)02(b)-0021-03
互聯(lián)網(wǎng)飛速發(fā)展,提供的網(wǎng)絡(luò)服務(wù)也越來越多。而在眾多的網(wǎng)絡(luò)服務(wù)中,即時(shí)通訊又成為了使用最廣、影響最大、運(yùn)營最成功的網(wǎng)絡(luò)服務(wù)之一。盡管如此,網(wǎng)頁聊天室仍有其生存空間,原因在于網(wǎng)頁聊天室是具有主題性的,特定群體會在特定聊天室中討論相關(guān)話題,適合陌生人之間交流,而實(shí)時(shí)通訊軟件則是用以維系已有的人際關(guān)系。但在技術(shù)層面,網(wǎng)頁聊天室無法實(shí)現(xiàn)實(shí)時(shí)通訊軟件的主動推送(Push)機(jī)制,所有客戶端都會以輪詢機(jī)制和服務(wù)器進(jìn)行通信,網(wǎng)站主機(jī)收到輪詢的請求會推送整個(gè)網(wǎng)頁到客戶端,導(dǎo)致網(wǎng)站服務(wù)器負(fù)載過重,且客戶端將因?yàn)榫W(wǎng)站負(fù)載過大,響應(yīng)速度變慢而產(chǎn)生信息傳遞停滯現(xiàn)象?;贏JAX、Web Service和SIP協(xié)議建立Web接口的端對端異步通信機(jī)制可以解決此類問題。
1 相關(guān)理論與技術(shù)
通過采用AJAX及SIP通訊協(xié)議,設(shè)計(jì)一個(gè)Web Service并以Web為接口的端對端異步通信實(shí)例,闡釋W(xué)eb Service雙向通訊的建構(gòu)方式,同時(shí)對AJAX技術(shù)、SIP通訊協(xié)議的原理與應(yīng)用作簡要介紹。
1.1 Web Service雙向通信機(jī)制
如圖1所示[1],建立Client/Server雙向通信的松散連接及緊密連接架構(gòu),Web Service雙向通信包含了一個(gè)Client的主動請求和一個(gè)Server端的前項(xiàng)式Push或事件通知。這是從服務(wù)互動的觀點(diǎn)來設(shè)計(jì)的,最少會包含這3種型態(tài),而每一個(gè)端點(diǎn)都像這樣具備Client與Server的功能設(shè)計(jì)。
(1)TYPE I是一個(gè)常見的單向Web Service交互式樣板;Rc:表示Client端初始化一個(gè)請求,這個(gè)請求可以接收響應(yīng)或是不需要響應(yīng)。
(2)TYPE II是一個(gè)Server to Client的異步Reply與Event Notification的交互式樣板,實(shí)際上異步Reply常被塑造成Event Notification的模式,有ACK就響應(yīng),否則就是Notification;Es:表示Server的事件通知,可以要求具有ACK的響應(yīng),也可以是一個(gè)事件通知。
(3)TYPE III與TYPE I相反;Rs:表示Server端初始化一個(gè)請求,這個(gè)請求可以接收響應(yīng)或是不需要響應(yīng)。
圖1中實(shí)心的箭頭是初始化請求,虛線則是選擇性的信息響應(yīng),TYPE I Server必須提供適當(dāng)?shù)腤SDL,通過SOAP傳遞給Client來使用,TYPE II 和TYPE III在Client必須提供適當(dāng)?shù)腤SDL,通過SOAP傳遞給Server來使用,而Web Service代理人需同時(shí)具備TYPEI~TYPEIII的行為能力,在一個(gè)Web Service的端點(diǎn)中同時(shí)存在Client/Server的角色時(shí)就會出現(xiàn)狀態(tài)協(xié)調(diào)性的問題,如果協(xié)調(diào)性出現(xiàn)問題就會出現(xiàn)錯(cuò)誤,傳統(tǒng)WSDL是One-way方式,要實(shí)現(xiàn)Web Service雙向通信就要做動態(tài)的設(shè)計(jì)。
1.2 AJAX技術(shù)
AJAX的全名為Asynchronous JavaScript and XML,是JavaScript及XML等技術(shù)的結(jié)合體,另外AJAX也包含瀏覽器端如何呼叫服務(wù)器端Web Service的HTTP Request技術(shù)[3]。從AJAX全名的字義中可以了解,AJAX就是異步的JavaScript與XML,它突破了傳統(tǒng)網(wǎng)頁開發(fā)技術(shù)的限制,使得網(wǎng)頁更具互動性。
1.3 SIP通訊協(xié)議的原理與應(yīng)用
SIP是一個(gè)應(yīng)用層的控制通訊協(xié)議,可以建立、修改或結(jié)束多媒體聯(lián)機(jī)[4]。以O(shè)SI定義的網(wǎng)絡(luò)七層來分類,SIP應(yīng)該屬于會話層,但是也有人將其歸類在廣義的應(yīng)用層。
SIP目前共定義九大邏輯組件[5],因該文僅使用到Proxy Server這個(gè)組件,利用該組件的原理,將該組件的部分功能設(shè)計(jì)成Web Service。Proxy Server是一個(gè)中介組件,同時(shí)具有Server 與Client的雙重角色,相當(dāng)于H.323中的Gatekeeper,通常SIP User Agent發(fā)出請求時(shí)并不知道對方的地址,需要Proxy Server從中協(xié)助,當(dāng)Proxy Server無法取得SIP User Agent所要求的聯(lián)機(jī)對象的地址時(shí),Proxy Server會通過預(yù)設(shè)的路由選擇方式轉(zhuǎn)送給其他Proxy Server代為解析,此時(shí)轉(zhuǎn)送請求的Proxy Server便會成為Client端。如圖2所示,以INVITE為例,假設(shè)Smith要用SIP Phone 與John通話,首先Smith與John的SIP Phone要先分別向各自的SIP Proxy注冊,接著Smtih的SIP Phone發(fā)出 INVITE Request,其中INVITE Request中會有幾個(gè)標(biāo)頭字段:Via、To、From、Call-ID、CSeq、Contact、Max-Forward、Content-Type、Content-Length。因?yàn)镾mith的SIP Phone并不知道John的地址或是John所注冊的SIP Proxy地址,Smith會將INVITE Request送到自己所注冊的SIP Proxy(Smiths Proxy),Smiths Proxy會回傳100(Trying)給Smith的SIP Phone,100 (Trying)表示Proxy已經(jīng)收到并處理INVITE Request,而Smiths Proxy會根據(jù)IP或是域名找到John的SIP Phone所注冊的Proxy,在把INVITE Request傳送出去之前,Smiths Proxy會先將自己的地址填在Via字段,加到INVITE Request 的標(biāo)頭,然后送到John的SIP Phone所注冊的Proxy (Johns Proxy),而Johns Proxy則會在收到INVITE 訊息后回傳100(Trying)給Smiths Proxy,表示已經(jīng)收到并處理INVITE Request,此時(shí)Johns Proxy會查詢數(shù)據(jù)庫,找到John目前所在的IP 地址,之后Johns Proxy會將自己的地址填在Via 字段,加到INVITE Request的標(biāo)頭并將INVITE Request傳送給John的SIP phone。在收到INVITE 信息后,John的SIP Phone 會進(jìn)入Ringing的狀態(tài),并依照先前所紀(jì)錄的Via字段,依照路徑回傳180(Ringing)訊息給Smith的SIP Phone并告知John有來電。當(dāng)Smith的SIP Phone收到180 (Ringing)信息后,可以顯示某些信息并等待John接起電話,若John接起電話,表示John允許建立聯(lián)機(jī),John的SIP Phone響應(yīng)200(OK)信息給Smith的SIP Phone,而200(OK)的訊息中,可以攜帶John希望建立RTP 封包聯(lián)機(jī)的相關(guān)信息和參數(shù)(IP 地址與Port)的SDP給Smith,其中SDP是附加在SIP Message后面。此時(shí)Smith的SIP Phone因應(yīng)200(OK)的信息響應(yīng)ACK 給John的SIP Phone,兩端SIP聯(lián)機(jī)就算是建立完成,此時(shí)便可以利用之前Message所攜帶的SDP里的相關(guān)參數(shù),開始傳輸RTP 封包。若John拒絕受話,則John的SIP Phone就會傳送一個(gè)CANCEL訊息給Smith的SIP Phone。
2 結(jié)語
過去在瀏覽器上運(yùn)行需要單向、雙向,全雙工、半雙工的服務(wù)(如聊天室、語音通話、視訊等)都存在一些問題,網(wǎng)頁聊天室采用共通的Session或全局變量來達(dá)成信號溝通的目的,而瀏覽器也會定時(shí)PostBack,造成Client端瀏覽器換頁的動作產(chǎn)生,也會存在一些Session中斷或是無法清除的問題,對于實(shí)時(shí)的訊號交換是一個(gè)瓶頸,許多運(yùn)行順暢的語音或視訊軟件,都是以Active X或是Applet的組件嵌入方式安裝在Client端瀏覽器中,運(yùn)用了AJAX的方式呼叫CallBack機(jī)制后,尋找可用的Web Service,結(jié)合SIP通信協(xié)議,讓信息或軟件可以快速地組合出新的服務(wù),也可以達(dá)到信號實(shí)時(shí)交換的需求,另外提供了一種快速開發(fā)以瀏覽器為用戶端軟件系統(tǒng)的新方式,而Client瀏覽器不再需要一直進(jìn)行更新網(wǎng)頁的動作,也不需要嵌入任何組件,這對目前很多使用者因嵌入不明組件造成中毒或是黑客入侵,有實(shí)質(zhì)上的幫助,提高信息安全的防護(hù)。
參考文獻(xiàn)
[1] Zhensheng Wu.A Way of Using Web Service by AJAX[C]//Proceedings of 2008 International Symposium on Distributed Computing and Applications for Business Engineering and Science.2005.
[2] Wu Chou,F(xiàn)eng Liu.Web Service for Tele-Communication[C]//Proceedings of the Advanced International Conference on Telecommunications and International Conference on Internet and Web Applications and Services.2006.
[3] 謝延紅,錢愛增.利用Ajax技術(shù)開發(fā)無刷新聊天室系統(tǒng)[J].長春師范學(xué)院學(xué)報(bào),2007,26(6):86-89.
[4] 施昌偉.基于SIP協(xié)議的即時(shí)通訊系統(tǒng)的研究與實(shí)現(xiàn)[D].南京郵電大學(xué),2012.
[5] 張晨光.基于H.323協(xié)議的IP呼叫中心坐席終端設(shè)計(jì)與實(shí)現(xiàn)[D].北京郵電大學(xué),2008.