大话web服务器开发

openkk 12年前
     <div id="news_body">     <p> 本文纯碎处于个人理解不可做科学依据。</p>     <p> <strong>前因</strong></p>     <p> 工作这么多年断断续续看过一些有 web 服务器编程的书,但是一直没有把自己的理解整理起来,今天索性就做个总结,记得第一次接触 web 网页编程是 02 年,那时学校里计算机比赛,学校有个哥们用 ASP 写了一个电子商务的网站,记忆中那会好像电子商务刚刚起步哈,好生羡慕,处于对技术渴求自己去书店买了网站开发的书,埋头苦读有一个月,后来还和同学一起给他叔做了网站,算是练手,很自豪处于程序猿普遍心理,当时心想吊什么哥也能做 web,认识 web 服务器开发是从那时开始的吧,现在回想起来那时真是个菜鸟。</p>     <p> <strong>工作中的 web</strong></p>     <p> 自从 04 年离校之后直到 06 年才又一次接触了 web 开发,那时公司有个日本 UPS 监控项目,项目中有个设备需要通过网页配置设备的参数,由于是嵌入的设备所以用的是 CGI,最早接触 web 人都知道 CGI,要用这个做网站简直是跟自己的体力、耐力较劲,一堆堆 HTML 脚本嵌入在C代码中,一个配置的功能嵌入的 HTML 代码就差不多有 2 万行,后期维护更别说了,可是没办法因为是嵌入的系统,只有这样更高效,而且嵌入设备本身自己的资源有限,所以也只能用 CGI,做完这个项目处于对技术的深入了解,买了一些网站开发的书看,记得那会国内做项目用的比较多的是 asp.net 和 JSP,PHP 用的人很少基本上没有,现如今已经是 2012 年再也没有接触过 web 服务器开发了,但这期间一直关注 web 服务器开发相关的技术。</p>     <p> <strong>我们都是站在巨人的肩上</strong></p>     <p> 谈到网页大家都知道是 HMTL 书写的一个文件,自从 93 年 HTML 出现以来,是互联网的发展发生了翻天覆地的变化,说实话 HTML 至今仍是互联网的根本,多少互联网的公司在这之后起来又倒下,人类的信息在有 HTML 构建的网中交叉传播,随着互联网的发展人们信息的渴求越来越来大,很多现有的业务已经不能满足人们的需要,而且随着 PC 的发展、网络硬件环境和社会其他行业的信息化的提高,人们对互联网的需求不仅仅是信息的获取,更多人把相关的业务和数据处理都放到互联网上,HTML 由于其特殊性(不需要安装客户端),越来越受到人们亲来,好多公司把业务处理直接放到互联网上提供给客户,在发展的初期技术人员要完成相应的业务,生成指定的页面只能将 HTML 代码嵌入到自己的代码中,根据不同的业务打印出不同的 HTML 页面,这个时候的网站开发是最初级阶段,没有所谓的 WEB 服务器,技术人员要自己处理网络连接、业务逻辑、脚本网页生成、数据访问,这其中的网络连接处理就占用很大的开发时间,相当于每次开发技术人员都要先开发一个高效的网络服务器,而生成 HTML 网页的代码由于每次的业务逻辑不同,都要重新实现,并且实际的代码和 HTML 代码穿插在一起也增加了项目的维护难度,CGI 就是这么一个东西,估计现在已经没有人用了,随着应用的深入和推广,人们发现好开发人员的好多工作都是重复的劳动,这是有些大一点的公司开始,把这些重复劳动的工作都抽离出来,例如微软推出了 iis 服务器,96年推出了 ASP 脚本,这样做得目的就是让技术人员从繁杂的服务器开发和脚本生成中解脱出来,只专注于业务逻辑的开发,这个时间的发展仅仅经过了一年的时间就出现了很多 web 服务器和服务器端开发脚本,像 PHP 就是在 94 年出现的,比较有名的 Apache 也是在那个时间短出现的,到现在已经出现好多 web 服务器和服务器端脚本语言,例如 Nginx、python、Rube、jsp、lua、lisp 和 asp.net 等等,最值得人们敬畏的是这些都是免费提供给人们使用,今天人们可以站着前人的肩膀上很轻松的开发基于 WEB 的应用,甚至你都不需要懂任何服务器的技术,只需要学会脚本懂得如何处理用户的需求。</p>     <p> <strong>底层的服务器</strong></p>     <p> 今天我不需要自己实现一个 web 服务器了,有许多好用的服务器我们可以直接拿来使用,但对于一个真正 geek 程序员,我觉的必须懂一点服务器的原理,作为一个 web 服务器主要解决几个问题(1)平台问题,要支持不同的平台,这就要求服务器在开发过程中内核必须使用标准的 POSIX,同时也要可以跨平台版本编译(2)网络连接高并发的问题(3)HTTP 协议的解析和处理,这三个问题构成了一个 web 服务的内核层,所有的 web 服务器都要解决这三个问题,一个 web 服务器的性能好坏就取决于这三个问题谁解决的更好,除了这些作为一个 web 服务器还有支持可扩展性,提供第三方扩展的开发,可以根据不同的需求附加不同的功能库,服务器最好还要支持负载均衡的功能,因为随着访问量的增加,一个服务器很难应付更多的访问请求。</p>     <p> <strong>我们的脚本</strong></p>     <p> 脚本的第一个问题:</p>     <p> HTTP 基于问答的特性决定了脚本的实现,我们知道 HTTP 协议是问答方式的,就是你请求我给你发回内容,这个是有早起的互联网的特性决定的,也只有这样互联网才能更灵活,HTML 的网状结构才能变成一个空间的网状结构,因为大家可以不需要关心相互的状态,只需要一个连接就可以相互传播和访问,但对于具体的应用,单独的一个网站要处理自己的业务,确需要保留场景和业务逻辑的状态,没有办法脚本就必须解决这个问题,帮助网页维护一个状态是任何脚本语言必须解决的问题,大部分脚本语言是通过 SESSION 和 COOKIE 来实现的,这几乎成为一种共识,只要开发服务器端脚本都实现这个功能,当然也可以不通过这个来实现状态的持久化,可以通过内存服务器,例如 memcache(更高效)等。</p>     <p> 脚本的第二个问题:</p>     <p> 处理的业务各种各样,可能有些业务脚本现有的功能只能满足部分功能,这就要就脚本语言有很好的可扩展性,用户可以根据自己的需求实现不同的库,通过脚本调用,达到扩展功能的目的。</p>     <p> 脚本的第三个问题:</p>     <p> 效率是一个脚本受欢迎的关键,这里的效率除了执行效率还有开发效率。<br /> </p>     <div id="come_from">      来自:      <a id="link_source2" href="/misc/goto?guid=4958331516538440369" target="_blank">hp.dewen.org</a>     </div>     <p></p>    </div>