我一直坚持一个观点,从web体系学习服务器端程序设计,web作为发展最早也是前景最广阔的internet模型,几乎支撑了网络世界一半以上的应用,其他email ftp等传统应用虽然产生时间也很早但几乎都很没落,只有web风采依旧,蓬勃发展,从apache到lighttp到nginx等,一个接一个高性能的web服务器程序分别被开发出来,上层应用cgi, isapi(nsapi), fastcgi助力,html协议也在不断发展,html5也要登堂亮相,各种脚本语言争相斗艳,python、php、java、asp.net等。web应用支持了目前最大规模的数据google,支持了最大量用户的访问,因此各种存储、云计算等都是首先在web领域获得应用,可以说web就是it领域的创新源泉,看下apache下面有多少项目就可见一般。web体系可谓博大精深,从web体系学习服务器端程序设计是学无止境的,从nginx等服务器程序设计上可学习server程序如何分块、如何高效,从isapi/nsapi模型上可学习如何用进程内模块扩展应用,从fastcgi可学习如何用进程外模块扩展应用,从各种cache方案中可学习如何为server端提速,从各种脚本应用上可学习如何为server端程序二次开发助力,web是源泉,web的各种这方式几乎概括了server端程序的各种架构模型。当然一般自定义协议服务器和web还是有些地方不同的,最显著的区别一般也就在于协议不一样,另外就是web是无状态一般不保持连接,因此web需要传递各种session等维持状态的数据,总之从web可学习的地方实在是太多。
简单类比下web领域开发和一般server的扩展
nginx模块/apache模块 server程序+plugin
cgi fork子进程
fastcgi server proxy模式,由于fastcgi可网络方式部署,所以很容易在一个局域网内部实现一个ioserver+N logicserver模型
简单类比就可知道,如果一个server程序只要能很方便的支持plugin+fastcgi就可适应几乎所有各种需求,可惜的是一般的server程序几乎都不支持这两个模式的扩展,大多数gameserver只支持lua等脚本,说实在的,支持个脚本跟支持fastcgi和plugin模块相比还是差很多,如果支持fastcgi或者plugin只要做个plugin就支持lua了。