轻量级webserver kepler/thttpd/shttpd简单对比

最近需要一个简单的webserver,对几个做了下简单对比:

选择时原则如下:

  • 支持cgi:  需要用cgilua
  • 占用内存少
  • 占用cpu资源少
  • 最好支持跨平台

 

1: kepler/xavante

优点:

  • 跨平台,支持windows,linux等主流操作系统。
  • 由于本身就是用lua写得,该框架对lua的支持非常好。

缺点:对每次请求都是新建一个lua虚拟机,如果是同一个文件多个请求,则会查看以前缓存的虚拟机是否有效,如果有效则仍然采用该虚拟机。

          虽然具有回收机制(我也改了代码强制回收),但内存并没见明显下降,所以内存使用会越来越多,直到你所有文件都访问完毕。

 

2: shttpd

优点:

  • 跨平台,支持windows,linux等主流操作系统。
  • 代码少(只有3K行)
  • 内部支持perl,python,预计下个版本支持lua

缺点:在linux下安装后运行,直接吓了我一跳,用去了10M内存,不用再仔细看了,直接扔掉吧

 

3: thttpd

优点:代码少,占用内存少

缺点:

  • 只能运行在类linux操作系统上
  • 只要类似 http://ip/cgi-bin/cgi/xxxx的调用,都直接交给cgi处理了
  • 对所有文件都是一次读取完毕,同时缓存下来。
  • 不能进行高权限的系统调用,比如说调用如下命令,则不会成功(改了代码,以root用户登陆,不成功)

os.execute("reboot")

本来最倾向于使用kepler/xavante的,但内存从不见回收,只好抛弃,而shttpd在试用时就直接抛弃了,那么就只好采用thttpd,看了下代码,将其对cgi的处理改了一下,对文件的缓存,暂时不予处理(缓存就缓存吧,静态页面一般也不大),而对系统调用就考虑其他方式吧

最后修改后的结果是:除非进行文件上传,否则总共只有1M不到的内存消耗。

由于网页是用cgilua写的,故在windows下就直接用xavante做webserver,嵌入式linux下就改用thttpd了

你可能感兴趣的:(windows,虚拟机,linux,cgi,lua,跨平台)