互联网飞速发展,提供的网络服务也越来越多。而在众多的网络服务中,即时通讯又成为了使用最广、影响最大、运营最成功的网络服务之一。尽管如此,网页聊天室仍有其生存空间,原因在于网页聊天室是具有主题性的,特定群体会在特定聊天室中讨论相关话题,适合陌生人之间交流,而实时通讯软件则是用以维系已有的人际关系。但在技术层面,网页聊天室无法实现实时通讯软件的主动推送(Push)机制,所有客户端都会以轮询机制和服务器进行通信,网站主机收到轮询的请求会推送整个网页到客户端,导致网站服务器负载过重,且客户端将因为网站负载过大,响应速度变慢而产生信息传递停滞现象。基于AJAX、WebService和SIP协议建立Web接口的端对端异步通信机制可以解决此类问题。
1相关理论与技术
通过采用AJAX及SIP通讯协议,设计一个WebService并以Web为接口的端对端异步通信实例,阐释WebService双向通讯的建构方式,同时对AJAX技术、SIP通讯协议的原理与应用作简要介绍。
1.1WebService双向通信机制
如图1所示[1],建立Client/Server双向通信的松散连接及紧密连接架构,WebService双向通信包含了一个Client的主动请求和一个Server端的前项式Push或事件通知。这是从服务互动的观点来设计的,最少会包含这3种型态,而每一个端点都像这样具备Client与Server的功能设计。
(1)TYPEI是一个常见的单向WebService交互式样板;Rc:表示Client端初始化一个请求,这个请求可以接收响应或是不需要响应。
(2)TYPEII是一个ServertoClient的异步Reply与EventNotification的交互式样板,实际上异步Reply常被塑造成EventNotification的模式,有ACK就响应,否则就是Notification;Es:表示Server的事件通知,可以要求具有ACK的响应,也可以是一个事件通知。
(3)TYPEIII与TYPEI相反;Rs:表示Server端初始化一个请求,这个请求可以接收响应或是不需要响应。
图1中实心的箭头是初始化请求,虚线则是选择性的信息响应,TYPEIServer必须提供适当的WSDL,通过SOAP传递给Client来使用,TYPEII和TYPEIII在Client必须提供适当的WSDL,通过SOAP传递给Server来使用,而WebService代理人需同时具备TYPEI~TYPEIII的行为能力,在一个WebService的端点中同时存在Client/Server的角色时就会出现状态协调性的问题,如果协调性出现问题就会出现错误,传统WSDL是One-way方式,要实现WebService双向通信就要做动态的设计。
1.2AJAX技术
AJAX的全名为AsynchronousJavaScriptandXML,是JavaScript及XML等技术的结合体,另外AJAX也包含浏览器端如何呼叫服务器端WebService的HTTPRequest技术[3]。从AJAX全名的字义中可以了解,AJAX就是异步的JavaScript与XML,它突破了传统网页开发技术的限制,使得网页更具互动性。
1.3SIP通讯协议的原理与应用
SIP是一个应用层的控制通讯协议,可以建立、修改或结束多媒体联机[4]。以OSI定义的网络七层来分类,SIP应该属于会话层,但是也有人将其归类在广义的应用层。
SIP目前共定义九大逻辑组件[5],因该文仅使用到ProxyServer这个组件,利用该组件的原理,将该组件的部分功能设计成WebService。ProxyServer是一个中介组件,同时具有Server与Client的双重角色,相当于H.323中的Gatekeeper,通常SIPUserAgent发出请求时并不知道对方的地址,需要ProxyServer从中协助,当ProxyServer无法取得SIPUserAgent所要求的联机对象的地址时,ProxyServer会通过预设的路由选择方式转送给其他ProxyServer代为解析,此时转送请求的ProxyServer便会成为Client端。如图2所示,以INVITE为例,假设Smith要用SIPPhone与John通话,首先Smith与John的SIPPhone要先分别向各自的SIPProxy注册,接着Smtih的SIPPhone发出INVITERequest,其中INVITERequest中会有几个标头字段:Via、To、From、Call-ID、CSeq、Contact、Max-Forward、Content-Type、Content-Length。因为Smith的SIPPhone并不知道John的地址或是John所注册的SIPProxy地址,Smith会将INVITERequest送到自己所注册的SIPProxy(Smith’sProxy),Smith’sProxy会回传100(Trying)给Smith的SIPPhone,100(Trying)表示Proxy已经收到并处理INVITERequest,而Smith’sProxy会根据IP或是域名找到John的SIPPhone所注册的Proxy,在把INVITERequest传送出去之前,Smith’sProxy会先将自己的地址填在Via字段,加到INVITERequest的标头,然后送到John的SIPPhone所注册的Proxy(John’sProxy),而John’sProxy则会在收到INVITE讯息后回传100(Trying)给Smith’sProxy,表示已经收到并处理INVITERequest,此时John’sProxy会查询数据库,找到John目前所在的IP地址,之后John’sProxy会将自己的地址填在Via字段,加到INVITERequest的标头并将INVITERequest传送给John的SIPphone。在收到INVITE信息后,John的SIPPhone会进入Ringing的状态,并依照先前所纪录的Via字段,依照路径回传180(Ringing)讯息给Smith的SIPPhone并告知John有来电。当Smith的SIPPhone收到180(Ringing)信息后,可以显示某些信息并等待John接起电话,若John接起电话,表示John允许建立联机,John的SIPPhone响应200(OK)信息给Smith的SIPPhone,而200(OK)的讯息中,可以携带John希望建立RTP封包联机的相关信息和参数(IP地址与Port)的SDP给Smith,其中SDP是附加在SIPMessage后面。此时Smith的SIPPhone因应200(OK)的信息响应ACK给John的SIPPhone,两端SIP联机就算是建立完成,此时便可以利用之前Message所攜带的SDP里的相关参数,开始传输RTP封包。若John拒绝受话,则John的SIPPhone就会传送一个CANCEL讯息给Smith的SIPPhone。
2结语
过去在浏览器上运行需要单向、双向,全双工、半双工的服务(如聊天室、语音通话、视讯等)都存在一些问题,网页聊天室采用共通的Session或全局变量来达成信号沟通的目的,而浏览器也会定时PostBack,造成Client端浏览器换页的动作产生,也会存在一些Session中断或是无法清除的问题,对于实时的讯号交换是一个瓶颈,许多运行顺畅的语音或视讯软件,都是以ActiveX或是Applet的组件嵌入方式安装在Client端浏览器中,运用了AJAX的方式呼叫CallBack机制后,寻找可用的WebService,结合SIP通信协议,让信息或软件可以快速地组合出新的服务,也可以达到信号实时交换的需求,另外提供了一种快速开发以浏览器为用户端软件系统的新方式,而Client浏览器不再需要一直进行更新网页的动作,也不需要嵌入任何组件,这对目前很多使用者因嵌入不明组件造成中毒或是黑客入侵,有实质上的帮助,提高信息安全的防护。
参考文献
[1]UsingWebServicebyAJAX[C]//Proceedingsof2008InternationalSymposiumonDistributedComputingandApplicationsforBusinessEngineeringandScience.2005.
[2]WuChou,viceforTele-Communication[C]//ProceedingsoftheAdvancedInternationalConferenceonTelecommunicationsandInternationalConferenceonInternetandWebApplicationsandServices.2006.
[3]谢延红,钱爱增.利用Ajax技术开发无刷新聊天室系统[J].长春师范学院学报,2007,26(6):86-89.
[4]施昌伟.基于SIP协议的即时通讯系统的研究与实现[D].南京邮电大学,2012.
[5]张晨光.基于H.323协议的IP呼叫中心坐席終端设计与实现[D].北京邮电大学,2008.
来源:科技资讯 2017年5期
作者:徐伟
友情链接: |
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有 如有不愿意被转载的情况,请通知我们删除已转载的信息。 联系方式:电子邮件:1053406363@qq.com 豫ICP备2023024751号-1 |