基于分布式对象的网游程序结构设计(2)

来源:互联网 发布:澳大利亚海关数据查询 编辑:程序博客网 时间:2024/03/29 01:54

1           Web技术的发展和网页游戏

 

Web技术之所以能够如此快速发展,究其根源,在于基于BS结构的分布式应用,客户端不再需要部署其它软件,降低了发布成本和维护成本。并且使用浏览器,能够浏览各种网页,且与平台无关,不管网页服务器运行在WindowsUnix,还是其它操作系统上面。如果不是这个特性,Web技术和浏览器应用不会发展如此之快,这点谁都不能够否认。也正是由于这点特性,带动了整个Internet的发展,促进了Web相关的各种技术的研究。

提到Web,我们都会联想到各种名词和概念,HttpJavaASPSOAP等等,一方面反映了技术发展蓬勃向上,欣欣向荣的趋势,也在另一个侧面,说明了Web技术发展本身缺乏系统性和完整性。也就是说,在各种Web应用过程中,发现缺少什么,还有什么不方便,那么就补充什么,继而引入新的概念和技术。

最早超文本描述语言HTML是静态的,在客户端表现力不丰富。服务器端存储的网页,只能够下载到客户端进行显示浏览,客户端的操作需要提交到服务器进行处理,即便类似于简单的输入参数的验证,在客户点击确认之后,也由服务器进行校验;如果输入错误,客户端需要等到几秒甚至几十秒的时间,才能够得到反馈。改变这一现状的是1995年,Netscape引入的Javascript,使得在客户端能够执行脚本。解决了这一问题,程序员可以使用脚本语言,创建内容和表现力更加丰富的HTML页面。

AJAX进一步提高了页面的表现力和客户的体验。AjAX不是一个新的技术,1999年,微软的IE5就支持这种特性,只不过当时并没有得到认可。AJAX的核心思想是异步操作,可以通过JAVAScriptVBScript调用。客户端在提交请求之后,不再需要等待响应。当收到服务器响应之后,使用JavaScriptCSS更新页面相应的部分,而不需要更新整个页面。

在服务器端,最早的Web服务器只是简单的接收Http请求,并将存储在服务器上的Html页面,传送给浏览器。CGI技术的出现,使动态页面生成成为可能。允许服务器端的应用程序,根据客户端的请求,动态生成HTML页面。使客户端和服务器端能够进行动态信息交换,可以根据客户端请求,当前服务状态,以及数据库的内容,为客户订制页面。随着CGI技术的发展,聊天室,论坛,电子商务等各种各样的Web应用程序也蓬勃兴起。

早期的CGI是可执行程序,用C/C++等语言开发。为了简化CGI程序的修改,发布和编译。逐渐采用脚本语言编写CGI程序。最早出现的是Perl语言编写的CGI程序,后来出现了多种脚本语言,PHPASPServelet等。

       Web技术的发展,也促进了基于Web的各种分布式应用的技术的提出和发展,最具代表性的是Web Service技术。简单的说,Web Service就是一种应用程序,可以使用标准互联网协议进行远程调用。其核心的内容是简单对象访问协议SOAP,和Web Service描述语言(WSDL)SOAP定义了消息格式,以及如何通过Http协议传输SOAPWSDl用于描述Web Service及其函数,参数,以及返回值。WSDL是文本格式,可以通过工具,生成对应的调用的桩函数代码。

       基于浏览器Web应用和服务可以用下面的图形象的描述:

 

 

HTML描述了Web Server和浏览器之间的数据格式。WSDL描述了Web Service的特性,但是它不描述Web Service和浏览器之间的数据包格式。

       从概念上讲,Web Server及其上的各种应用,诸如:各种网站,论坛,博克等,都可以看作是Web Service,它们提供的是一种信息服务。目前对Web Service的概念诠释为一种可以通过Web远程访问的者一组函数库。根据词义来说,服务和函数不是一个概念,正如函数不是应用程序一样。一组函数放在一起,绝不能够说是一个应用程序,应用程序具有整体上的完整性,能够对外提供某些功能。从这一点上说,对于稍微复杂一些的Web服务,都不是简简单单的远程调用。因此说,目前Web Sevice的发展还处于初级阶段,就好像90年代初的静态网页一样,随其发展和需求的不断增加和明确,肯定会不断出现新的概念和技术。

Web Service中,比较重要的两个名词是SOAPWSDLSOAP描述了调用接口的传输格式,WSDL描述了提供的服务的内容,参数,返回数值等。Web技术的发展过程中,形成了一种既定的概念或者结论,那就是服务器端和客户端是独立的应用,两者之间只在底层传输接口上进行交互。虽然也出现了一些浏览器的插件,将某些功能由服务器端下载到客户端执行,但是并没有打破这种概念。这就要求客户端,特别是客户端的开发者,从接口上去观察和理解Web服务。虽然WSDL可以描述服务的内容参数,但是随着服务变得越来越大,功能越来越多,各式各样,不同类型的服务,势必导致WSDL越来越复杂。

即便简单的Web服务,用WSDL描述起来也不简单;其文本格式,与其说是为了方便进行开发人员参考,还不如说主要为避免了通信上的问题(不同操作系统,不同模式的计算机都能够解析)。作为开发者,直接使用底层的Web Service接口,难度比较大。相当于将通信处理,接口的编解码全部由开发者承担,而且不同的Web服务,这些是不同的,可以想象是多么大的一个工作量;因此,一般是利用一些工具,根据WSDL生成客户端调用的桩,自动生成的代码有时不能够完全满足要求,此时还需要进行一些直接面对底层的开发工作。

客户端使用桩函数进行开发,上图略为做些修正:

 

 

       Web Service Stub虽然是自动生成的,但是其代表了Web Service定义的功能在浏览器或者客户端的映射。开发者直接了解Stub提供的功能和如何调用即可,不再需要关心如何编码,如何传输,也不用关系如何在StubWeb Service之间传递消息的。这不仅仅简化了开发工作,而且在概念和Web Service整体架构上,前进了很大的一步。不再通过传输接口调用服务器提供的Web服务,而是在本地,直接调用Web服务的桩,是一个概念和思路的转变。

       试想一下,如果我们将Web Service对上的接口标准化,将会是什么结果呢?明显一点,在Web Service StubWeb Service服务器之间的过程,对使用者来说变成透明的,不再需要关心。Web Service可以采用任何语言实现,可以用JavascriptVBScript,还可以是效率高的C/C++,两者之间的通信是Web服务的内部事务,可以使用SOAP,也可以使用任何自定义的或者任何熟知的协议。这将对Web技术的发展产生深远的意义。

在这种思想下,上图修正如下:

 

       Web Service Stub对上的标准接口,需要体现Web Service提供的各种服务,需要能够描述任何Web服务。最适合的方法是采用对象的概念,描述一个Web服务。一个Web服务,由多个对象组成,每个对象有属性和方法。客户端可以通过对象的方法,完成对服务的调用。比如,Web Service中包含有一个当前天气的对象,有温度,风速等属性,在客户端,直接读取对象的属性,即可完成对Web Service的调用。

       基于这种概念提出的模型,就是本文重点研究的分布式对象模型,如下图:

 

其中,蓝色的部分构成了分布式对象平台。

       基于BS的各种Web应用,其优点是不需要部署和安装。但是,HTML,HTTP最初都是针对文本信息的,虽然扩充了很多内容,诸如:动态网页,客户端插件等,力求丰富客户端的功能。但是其本身存在一些固有的缺憾,这对某些方面的应用,如网页游戏的应用,将是一个很大的限制。

1.  数据和资源文件反复下载

BS应用中,通过URL定位资源或者数据文件,在打开网页时,虽然图像等文件已经下载到本地了,但是在刷新时,还需要下载。虽然浏览器都提供了本地的Cache,针对相同的URL可以减少一些重复下载。但是,基于URL的缓存并不能够说明数据的内容是否发生变化了,是否应该下载,这在有些应用的时候会产生一些问题,以致于对于同一资源,需要使用不同的URL才能够在客户端正确刷新。数据本身的变化(例如图片发生变化),需要通过更新URL才能够正确下载,这本身就不是一种合理的处理方式。

2.  不方便维护客户端状态维护

服务器端不维护客户的状态,客户端重新打开网页,与第一次打开网页,对于服务器来说,没有什么不同。虽然使用Cookie能够在一定程度上解决这个问题,但是不是一种很好的方式,Cookie每次在客户端和服务器端的传输,都增加了通信的开销,再者Cookie在数量和大小上是有限制的。

3.  服务器端不能够主动发起数据的传输。

由于服务器端与客户端是无连接的,在某些应用场合,如果服务器端需要主动给客户端发消息,比如实现聊天室的功能,一个用户的发言,需要广播给其他客户端,实现就存在一些困难,需要用其它途径解决。这点恰巧是网友中必须实现的重要功能。

4.  编码简单,通信传输的开销大

在服务器和客户端传输使用文本方式编码,对于需要大量信息交互和频繁交互的应用场景下,通信传输占据的开销很大。

 

       基于BS结构的网页游戏,不可避免的存在这些问题。近些年来,网页游戏作为网络游戏的一个特殊的分支,发展也很快。其优点来自于BS架构,不需要安装,并且可以穿越防火墙(一般防火墙对于80或者8080端口都是开放的),因此针对与上班一族,有着先天的优势。在网站http://www.webgame.com.cn上,有当前很多流行的网页游戏介绍。

       目前网页游戏的特点都是偏向于休闲,交互性不是很强,画面表现力也不丰富。网页游戏只能够在游戏内容上,力求新颖,吸引玩家。其进一步,特别是在表现力和交互性上的发展,将受到BS结构上述问题的限制。

 

 

 
原创粉丝点击