警告
警告内容
确定
内容是加密的,请输入密码

确定
首页 >> Blog >> Browser/Server 软件结构  [Go back. ^_^]
Browser/Server 软件结构
1268407089 栏目:开发者 作者:火志溟 浏览() 评论()

    我们来讨论一下软件。这里的软件,不是单机的那种,而是需要配合网络使用的网络话的程序。通常这种软件有两种结构:C/S(Client/Server)和B/S(Browser/Server)。看此篇文章标题可以知道此文章是说B/S的,但为了说B/S也就不得不拿出C/S来对比一下了。

    Client/Server是传统的软件结构,翻译成中文就是:客户机/服务器。它是一种传统的结构。举例子简单描述一下它是什么样子,假如我们需要用一款财务软件。首先,我们需要购买这么一套软件。而为了让这个软件能正常使用,其实我们至少需要购买两个软件,一个是在你自己的PC上安装的(Client),一个是在服务器上安装的(Server)。这么一来我们可能已经要为这个ERP支付两个费用了,Client和Server上软件的费用。但我们单位有5个人都需要用这个财务软件,每个人都有每个人的机器,每个人都需要有自己的帐户和相应权限。好了,我们需要给每个人的机器都装上一个Client,那么我们还要再另外购买四个授权,来运行另外四个Client。开发财务软件的公司对我们的PC和服务器要求很苛刻。他们要求我们的服务器必须是Windows Server 2003,数据库必须是MS SQL Server 2000,PC上需要是Windows XP。[见下图]

    安装完了就是使用了,你的PC和服务器之间,通过安装的Client端软件和Server端软件进行通讯,交换数据并使用。[见下图]

    真好,这个财务软件真好使。除了花了许多钱外,除了需要更换服务器和PC的操作系统。其他的方面,都挺好的。

    那么怎么开发这么一套财务软件?具体里面如何我就不知道了,因为我没有开发过,所以只知道一些大概的情况。比如使用Visual Studio来进行开发,分别开发Client和Server端的软件。然后在各种环境下测试,发现只有在特定的环境下才可以稳定运行。于是告诉客户需要按照苛刻的要求来配置计算机。

    客户的操作系统更新换代了,当前版本不支持新的操作系统。那么不好意思,拿钱来,换新版本。于是,对于客户来说,一切如同重新开始。你想跨平台?许多软件都提供有Windows版、Linux版、MacOS版。我写这篇文章所用的OpenOffice就是如此,你从网上看到这篇文章时可能用到的Firefox或Chrome也是如此。但是很不幸,你花了那么多钱所买来的财务软件,不可能给你提供任何的选择。

    那么这个Client软件和Server软件可以用什么来编写呢?国内大部分做行业软件的都会用微软的Visual Studio(造成无法跨平台)。但像Java、C、C++等都是可以的,只不过是编写难度(其实就是会不会)的问题。其实有许多具有跨平台能力的框架可以比较容易的编写出能跨平台的程序,但是由于我们国家在软件这一块发展严重失衡,所以我就什么也不说了。

    之前一直在说C/S,可是我这篇文章所说的是B/S,那么到底B/S是什么样子呢?B/S当然就是拿浏览器(Browser)来代替客户机(Client)了,也就是用一个或一组运行在浏览器中的Web程序代替一个安装在某个操作系统上的应用程序。浏览器吗,可以是大部分人都用的IE,也可以是Firefox、Chrome、Opera、Safari,或者老牌的Netscape,以及其他的许多许多。嗯,B/S纯属在网络、网站不断发展的基础上而出现的。所以,我们需要先说一下一个浏览器是如何访问一个网站的。

    长久以来,浏览器都是这么访问一个网站的:

    你在地址栏里输入网址,比如我网站的某个页面http://www.ydmsh.net/www/Blog/,浏览器就会知道www.ydmsh.net为一个域名,并向代表了这个域名的服务器(我们叫Web Server)发送一个请求(Request),告诉这个服务器我要获取http://www.ydmsh.net/www/Blog/这个页面。服务器接收到这个请求以后,会向你的浏览器发送一个回执(Response),这个回执的信息就是http://www.ydmsh.net/www/Blog/这个你请求的页面的完整内容,通常就是HTML代码或XHTML代码,浏览器则把这些代码通过他们应有的含义直接显示出来。[见下图]

    我知道,我在其中省略了许多细节上的东西,这些细节非常复杂也非常重要,但是并不是我要重点阐述的,否则这篇文章将无比的冗长。

    接触过一些简单网站编写的人,应该都知道,每个页面都是由HTML代码、一些链接、一些图片组成的。而更高级点的网页,里面会用一些CSS、Javascript,或者是Flash等。我们把这些叫做一个静态页面,因为你写好这一些,放到Web服务器上后,当你在浏览器里打开他们的时候,其实就是一个简单的从服务器下载到你浏览器中而已。然而更复杂的网页它并不局限于此,服务器上的程序将根据浏览器所发送的网址中的一些参数,改变页面中的一些东西,然后再发送给浏览器。比如浏览器告诉服务器www.domain.com/index.php?page=2或者www.domain.com/index.php?page=3。虽然都是针对index.php这一个文件,但是服务器知道一个是显示第二页的内容而一个是显示第三页的内容,然后服务器就把这相应的页面完整的发送给了浏览器。

    之前说了这个浏览器可以处理的页面都可以用什么语言来写,在这里再总结一遍:HTML、XHTML(或类似的标记语言),CSS,Javascript,以及(其实主要是前面的)可以附加其上的Flash、Java小程序等。那么这个服务器(也就是Web Server)上的程序呢?ASP、JSP、PHP、Python、Perl都是时常见到的,如果有能力的话C和C++都是可以用的。为了运行这个程序,Web服务软件也是不可少的,比如IIS、Apache httpd、Nginx。

    看了编写一个网站所用到的语言和程序之后,我们可以看出,一个网站对其运行环境的要求并不是很高的。只要有一个浏览器,无论是IE还是Firefox,或者是Chrome、Opera、Safari中的任何一个,都是可以的,而只要能安装使用这些浏览器的任何机器和操作系统也都是可以的。而服务器呢?Apache httpd是使用最广泛的Web服务软件,它几乎可以装在任何操作系统上,而JSP、PHP、Python、Perl都有很好的跨平台性能。你的服务器,可以是Windows、可以是Linux、可以是MacOS、可以是其他。

    那么这和之前所说的C/S结构的财务软件有什么关系呢?OK。如果我们写一个网站,让它拥有和那个财务软件同样的功能呢?此时,一个B/S软件诞生了。{[2010年3月13日修订:[ 嗯,你只需要在你的服务器上配置好Web服务软件,如同放一个网站似的放上你的程序,而其他人直接用浏览器就可以了,不需要繁琐的逐个客户端去部署,一切就这么简单的完成了。 ]]}

    不过,一切还没有结束。

    C/S结构在某些方面还是很有优势的。比如分布式计算和分布式存储,数据并不单单是在Server上进行处理和存储,Client上同样可以做,并且实现起来也比较容易。而对于B/S,基本上B就是一个显示的作用,分担运算和分担存储都是很困难的。C和S之间一般只是交流数据或结果等信息,对网络的开销也比较小,而B与S之间通常则要一遍遍的传输一些与实际需要的数据和结果没有任何关系的HTML代码等内容,造成实际有用的数据传输所占比例可能比较小,网络开销比较大。C和S之间数据传输时的加密性也可以做的比较好,而B和S之间因为受限于HTTP协议,数据传输时加密是较为困难的事情。

    突然间,发现C/S原来有如此多的优点,那么为什么B/S现在如此的流行呢?首先在开发方面,给软件公司带来的成本的降低。其次在用户方面,谁都想少花钱多办事。另外,谁能保证目前的C/S软件就都是些优秀的并具有上面那些诸多优点的呢?数据真的就能安全传输吗?真的能做到分布式计算和分布式存储吗?比如我们公司之前试用的一个ERP软件,{[2010年3月13日修订:[服务器必须使用Windows Server 2003和MS SQL Server 2000,还有]]}需要服务器必须打开Guest账户并且此帐户不能设置密码,这下服务器安全性可就大打折扣了。

    不过,一切仍然还没有结束。

    Web技术是在改善中的,B/S的一些缺点也在逐渐被完善。我们分项目谈一谈。

    对于数据传输时的加密,可以使用在浏览器上安装专门的控件来达到,比如各个网上银行所使用的方法。但是如我前面所说的国内的软件发展问题,造成大部分这类网上银行控件都只能针对IE,因为它们都是用了IE私有的ActiveX。当安全性达到最大保障的同时,B/S的跨平台性也毁于一旦(这些控件就如同一个本地应用程序)。HTTPS是另一种解决方法。HTTPS协议使用SSL加密信道对传输的数据进行加密。虽然现在出现了破解SSL的传闻,但是它的安全性仍然是值得肯定的。当对数据安全有一定要求时,可以采用HTTPS协议。对于数据安全有非常高的要求的时候,可以使用浏览器控件,并尽可能的为各个常用浏览器都开发相应的控件。

    分布式存储的问题,也已经被许多技术实力比较高的公司和相关的国际组织注意到了。Google开发出了Gears,可以安装在许多主流浏览器上,使浏览器拥有本地存储的能力。而W3C在最新的HTML5协议中也加入了本地存储的功能。虽然这个HTML5协议还十分不成熟,但是已经得到许多公司的支持,而且Google非常看好此技术,并因此停止了它的Gears项目转而研究HTML5的相关内容。

    分布式计算这个问题目前好像还没有什么好的解决方法。在浏览器中计算仍然需要依托大量的扩展或控件来完成。比如运行一个Web游戏,其实是依托Flash来进行的。浏览器中原生的计算器,应该就是Javascript了,但是其效率并不高。但是,各个浏览器开发者都已经意识到Web应用程序的未来以及Javascript在其中的作用,都在努力提高Javascript的运行效率。

    网络开销的问题在B/S上可以说已经得到比较好的解决了。之前说了,C、S之间主要是传输最有意义的数据,而B只是做页面的显示所以需要C完整的传输一整页的内容,于是存在大量无用的网络开销。但是Javascript中的AJAX技术提供了解决办法。AJAX使得浏览器可以异步发送请求,而服务器不需要返回整个页面的内容,它只需要返回一个结果,这个结果可以是HTML片段,也可以是XML或Json这种格式化的数据。Javascript则根据返回的结果直接改变当前页面的某些内容,页面的其他内容不受影响,也不会产生额外的数据开销。下面举个例子来说一下AJAX的作用。

    之前讲动态页面的时候,浏览器发送一个带 page=3的index.php页面的请求给服务器,让服务发送page=3的index.php页面的完整内容来。而有了AJAX,浏览器只需要请求服务器发送page=3的数据,Javascript在浏览器里构建出所需要的页面。我最近做的一套程序光盘管理程序(http://www.ydmsh.com/Blu-ray/){[2010年3月13日修订2:[[此程序不支持IE]]]}就是这么一个思路。对服务器的请求,可以通过Get(查询)或Post(添加修改等)方法发送,而服务器则把结果通过Json这种格式以纯数据的方式返回。而浏览器地址栏里http://www.ydmsh.com/Blu-ray/HTML/#page=3这个井号后的内容,则可以提供后退前进等传统页面所有的功能(具体不详述)。

    {[2010 年3月16日修订:[ 详细叙述一下。通过AJAX的异步功能,和普通的动态页面访问是一样的,都是向服务器请求一个地址,这个地址也有可能就是www.domain.com/index.php?page=3,可以带Get,也可以带Post。服务器接收到访问请求之后,其处理过程也与普通动态页面是一样的。比如上面那个地址,请求取得第三页的内容。服务器端所做的动作在这里是不太一样的,它不是返回一个完整的页面结果,而是返回一个结构化的数据,可以是XML或Json格式的。这很容易做到,在服务器端程序编写上只需要稍微改一点点东西就可以了。当然服务器也可以返回标准的HTML代码片段,这就要看编写者需要这些数据干什么了。因为AJAX的存在,服务器端返回的结果并不是直接显示出来,AJAX会按照编写者的要求处理这个返回数据。

    使用AJAX之后,浏览器的前进后退键会失效,刷新也不能正常使用,因为页面的地址没有改变。如果要让浏览器可以正常的前进后退和刷新,需要一定的技巧,表面上看来,就是修改锚链,也就是地址栏地址井号后面的那些内容。当然代码上来讲,就要写很多了,不详述了。]]}

    于是,B/S结构就发展成了如下图所示的样子:

    目前都有什么B/S软件呢?许多OA、ERP软件都是B/S的,比如国内比较有名的通达OA。另外,我认为宽泛上讲GMail、Facebook这种应用都应该属于B/S程序,以及我刚做的“光盘管理”同样也是B/S程序。

    好了,先到这里吧,暂时先到这里。

 

本文章内容遵循署名-非商业性使用-禁止演绎创作共用协议   Tags: B/S  C/S  客户机  服务器  模式  浏览器  结构  软件  
[评论内容的所有权利属于评论者,并且只代表评论者的个人观点,与本网站无关。]
from:ellen @ 1294817054
谢谢,我非专业的都看懂了,正好用到。十分感谢
未回复
姓名:
 
输入您想显示的姓名
E-Mail:
 
不会公开显示,请放心。如果有必要网站管理者将用此与您取得联系。
评论内容:

忆黛蒙逝·博[from百度空间(停用)]    瑞丽服饰潮流馆[朋友的淘宝店]    我的新浪微博

Creative Commons License
忆黛蒙逝·建造源
鲁ICP备05000493号