我需要一个网络服务器来提供非常简单的POST / GET请求作为JSON。我不需要MVC,Rails,Django。我需要一些占用很少内存的东西,最好只需要5K左右。网络服务器将使用Facebook Thrift与Scribe等后端服务进行通信。每个http请求还将访问SQLLite数据库,每个用户一个,用户的数据不重叠。它将提供静态html文件以及json webservice。
我正在考虑以下事项:
其中哪些选项最好,还有哪些其他选项?我可以使用PHP,python或Lua进行基本脚本编写,甚至可以使用基本的C.我倾向于使用某种Erlang解决方案。
答案 0 :(得分:41)
我对nginx(http://nginx.net/)有过很好的体验,他说,在选择网络服务器时,你应该仔细查看你的要求并做出明智的决定,因为这些事情可能非常特定于应用程序。 / p>
你会注意到在这个问题中很多人推荐g-wan,Webmachine等等......这些都是你应该看的东西和基准,以确定它们对你的用例是否更快。
这是一个鼓励啦啦队的问题,没有“正确答案”。
答案 1 :(得分:11)
作为Webmachine的作者之一,我很乐意帮助你。我跟进的一个原因是,尽管Webmachine中没有与JSON相关的代码,但您可能会发现我们每天都使用它来处理许多不同的JSON请求和响应。它简单,干净,可扩展,性能也相当不错。
如果你只是想要静态传递,那么像nginx或lighttpd这样的东西将是一个明显的方法。对于混合的静态和动态请求以及内置的良好Web行为,您可能会发现Webmachine非常适合。
查看http://code.google.com/p/webmachine/wiki/ExampleResources上的简单示例代码以及http://blog.therestfulway.com/博客上的最新帖子 了解更多信息。
它对我们来说效果很好;如果您有任何问题,请随时给我留言。
答案 2 :(得分:9)
切诺基网络服务器,网址为www.cherokee-project.com
答案 3 :(得分:9)
要测量足迹,请查看可执行文件大小(不要忘记共享库)。
TrustLeap G-WAN(150 KB,无依赖关系)提供Java,C / C ++,Objective-C和D脚本。
根据这些基准测试,在运行速度更快的同时,它还使用比Nginx或Lighttpd更少的内存和CPU资源:
答案 4 :(得分:8)
Lighttpd具有很好的足迹,大部分记忆可能会被您选择使用的任何语言占用(除非您选择C路线,这是不推荐的)。
答案 5 :(得分:7)
IBM developerWorks上有一篇文章,其中包含大量“轻量级”Web服务器: Lightweight Web servers: http://www.ibm.com/developerworks/web/library/wa-ltwebserv/
答案 6 :(得分:7)
Mochiweb非常轻巧,处理愚蠢的高负荷。
答案 7 :(得分:4)
最快的嵌入式网络服务器是Snorkel - 在那里检查网站,他们在我的测试中使用ab销毁了nginx。 http://sites.google.com/site/snorkelembedded
答案 8 :(得分:4)
G-WAN(150 KB,包括ANSI C脚本)具有本机JSON解析器,可能是给定功能的最快可用(它允许您按名称或值除了从/向文本导入/导出之外)搜索条目。
击败150 KB的足迹(包括服务器+脚本引擎)将很困难。
答案 9 :(得分:3)
看看this。我认为这正是您所寻找的信息。您不需要功能齐全的Web服务器,因此使用Erlang + libevent / libev应该很好。
答案 10 :(得分:3)
对于C或Lua,Mongoose是一个选项,https://github.com/valenok/mongoose。
它每个请求使用超过5k,主要是因为每个连接数据具有预先分配的请求+头的缓冲区,并且默认情况下最大请求大小设置为16k。这是可调的,使其小于5k没有问题,只需在嵌入Mongoose时在mongoose.c中更改#define MAX_REQUEST_SIZE 16384
。在占用空间方面,它在磁盘上编译大约50k,不包括Lua(如果需要)和SSL(如果需要的话)。运行时占用空间取决于操作系统。
答案 11 :(得分:2)
由于您提到了Python,您可能需要查看web.py,以便以非常简单的方式侦听端口80并将URL映射到操作。
如果你想与一个标准的网络服务器配对(即在Nginx / FastCGI之后),它也将通过你最喜欢的CGI运行 - 我将在Nginx的recs中获得静态文件的大规模并发性。 (他们在Reddit上使用Lighttpd。)
thttpd是我要看的另一个网络服务器,特别是如果内存非常稀缺,就像嵌入式系统一样。
答案 12 :(得分:1)
在koanlogic.com网站上查看klone ...针对嵌入式系统它非常小,而且非常快:http://john.freml.in/teepeedee2-vs-klone。 它可以用C / C ++(超高性能)或通常的PHP / CGI(性能低得多)编写脚本,具体取决于技能/品味......
答案 13 :(得分:1)
如果可以用C或C ++编写代码,我认为lighttz是最快的并使用最少的内存。但是,之所以如此,是因为它使用的是libev,它绝对没有,没有php支持,没有html支持 - 没有。它提供的只是一个回调函数,你可以处理每个http请求。你将不得不解析http GET / POST请求并将html作为字符串返回。您可以看到它针对nginx,lighttpd,apache等进行了基准测试,并且位于顶部(link)。
答案 14 :(得分:1)
您可以查看FAPWS(快速异步Python WSGI服务器)。该项目的理念完全符合您的需求。 http://www.fapws.org
答案 15 :(得分:1)
将Nginx与Varnish(Facebook使用的缓存)和Apache Traffic Server(雅虎使用的缓存)进行比较:
而且,Nginx背后的人Igor Sysoev并不缺少comments on his blog。