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