Chinaunix首页 | 论坛 | 博客
  • 博客访问: 829974
  • 博文数量: 67
  • 博客积分: 10067
  • 博客等级: 上将
  • 技术积分: 2175
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-12 00:00
文章分类
文章存档

2012年(1)

2011年(7)

2010年(19)

2009年(33)

2008年(7)

我的朋友

分类:

2009-06-29 18:04:13

上次写到了关于web开发架构的一些设想。

那些设想暂时还不靠谱,只是个方向而已。
今天写些靠谱的。

自己写web server的好处是什么?
当然是自己控制所有的东西。

很有意思的一个事情就是,所谓的cgi程序由于你web server写的简单,没有接口,所以这种cgi的动态网页程序就直接嵌入到了web server中了。

而因为web服务器本身就是由脚本写的,动态网页程序嵌入进去后,速度就自然很快。根本不用管什么mod_perl,fastcgi。
如果应该有的优化也都是自己做,例如大量的重复读取数据库,那就直接自己做cache,根本不用什么外部模块,直接就用内存暂存了。

其实用脚本写web server以后,你也会发现,过去很多复杂的事情其实也很简单。一起都在你掌握中啊。

例如,原来写个文件上传程序的cgi,上传个文件,怎么都觉得费事。现在web server是你自己写的,直接在web server中嵌入对于文件上传的专门代码,这个web server接着就变成了一个专门的上传文件的服务器。和ftp服务器没什么两样。想做什么样的二次开发,都很容易。直接写啊。

当然,自己写web server也有不爽的地方,就是都要自己啊。最简单的目录浏览,也要自己写啊,还得生成html格式的数据返回回去。所有的东西都是自己写。

最后,说一下性能:
脚本写的web server性能怎么样呢?
我这里是用perl写的。事件系统采用的是单进程无阻塞事件触发系统。操作系统是winxp sp2。
对比对象是apache 2.2.11.0 ,用xampp安装的。
测试的是静态页面的读取。主要考验的是web server的事件触发系统的能力,socket的能力以及http协议分析的能力。
self是指 perl写的web server
apache就是指apache.
测试工具ab.exe

10000个连接 100个并发 no keep-alive
self:   11.75秒
apache:  7.09秒

10000个连接 100个并发 keep-alive
self:   5.54秒
apache:  4.32秒

大家可以看到,perl写的web server比apache还是要慢一点。但是慢的并不多。
当我自己看到结果后,就在思考,我慢在那里?检查一下代码,简化了一下后。新的结果出来了。

10000个连接 100个并发 keep-alive
self:   3.82秒
apache:  4.32秒

呵呵,我的快了吧!当然这个快是有些作弊(具体不说了)。我之所以慢的原因是在于每次分析http头所需要的时间太长,特别是由于使用了正则表达式,还有一些临时生成的变量(例如时间),造成了运算过多。所以,对于运算过多的部分做一下精简,我肯定就比apache还快。而且这里我还没提到一点,我的机器是双核。我的perl web server是单进程程序,所以测试时我的cpu占有率只是50%。而apache不一样,cpu占有率是90%,从这里来分析,我还占优。
不过,单进程的结构想多占cpu也不容易啊。我还真没办法呢!

阅读(1219) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~