25

我需要一个网络服务器来提供非常简单的 POST/GET 请求作为 JSON。我不需要 MVC、Rails、Django。我需要占用很少内存的东西,最好是每个请求大约 5K。网络服务器将使用 Facebook Thrift 与 Scribe 等后端服务通信。每个http请求还会访问一个SQLLite数据库,每个用户一个,并且用户的数据不重叠。它将提供静态 html 文件以及 json 网络服务。

我正在考虑以下几点:

  • Njinx 与 PHP,
  • 来自 Lua 的开普勒,
  • 使用 libevent 或 libev 滚动我自己的,也许是调用 Lua,或者
  • 麻糬网。

这些选项中哪个最好,还有哪些其他选项?我可以使用 PHP、python 或 Lua 编写基本脚本,甚至可以编写基本 C。我倾向于某种 Erlang 解决方案。

4

16 回答 16

41

我对 nginx ( https://nginx.org/ ) 有很好的体验,也就是说,在选择网络服务器时,您应该仔细查看您的要求并做出明智的决定,因为这些东西可能是非常特定于应用程序的。

您会注意到,在这个问题中,很多人推荐 g-wan、Webmachine 等……这些都是您应该查看和基准测试的东西,看看它们是否对您的用例更快。

这是一种鼓励啦啦队的问题,没有“正确答案”。

于 2008-10-30T04:00:40.010 回答
11

作为 Webmachine 的作者之一,我很乐意为您提供帮助。我跟进的一个原因是,即使 Webmachine 中没有与 JSON 相关的代码,您可能会发现知道我们每天都使用它来处理许多不同的 JSON 请求和响应很有用。它简单、可干净地扩展,并且性能相当不错。

如果您只是想要静态交付,那么像 nginx 或 lighttpd 之类的东西将是一个明显的选择。对于静态和动态请求的混合以及内置的良好 Web 行为,您可能会发现 Webmachine 非常适合。

查看http://code.google.com/p/webmachine/wiki/ExampleResources上的简单示例代码和http://blog.therestfulway.com/博客上的最新帖子以 获取更多信息。

对我们来说效果很好;如果您有任何问题,请随时给我留言。

于 2008-11-13T02:00:37.667 回答
9

要测量占用空间,请查看可执行文件大小(不要忘记共享库)。

TrustLeap G-WAN(150 KB,无依赖性)提供 Java、C/C++、Objective-C 和 D 脚本。

根据这些基准,它还比 Nginx 或 Lighttpd 使用更少的内存和 CPU 资源,同时运行速度更快:

http://www.gwan.ch/benchmark

于 2010-01-19T17:35:12.560 回答
9

切诺基网络服务器 www.cherokee-project.com

于 2009-05-25T18:19:13.207 回答
8

Lighttpd的足迹非常好,以至于你的大部分内存可能会被你选择使用的任何语言占用(除非你走 C 路线,这真的不推荐)。

于 2008-10-30T03:40:06.743 回答
7

IBM developerWorks 上有一篇文章,其中包含相当广泛的“轻量级”Web 服务器列表:
轻量级 Web 服务器:http://www.ibm.com/developerworks/web/library/wa-ltwebserv/

于 2008-10-30T03:50:13.383 回答
7

Mochiweb 是超轻量级的,可以处理非常高的负载。

于 2008-10-30T05:07:15.507 回答
4

最快的嵌入式网络服务器是 Snorkel - 在网站上结帐,他们在我的测试中使用 ab 破坏了 nginx。 http://sites.google.com/site/snorkelembedded

于 2010-07-21T11:47:30.383 回答
4

G-WAN(150 KB,包括 ANSI C 脚本)有一个原生 JSON 解析器,考虑到这些特性,它可能是最快的可用(除了导入/导出文本之外,它还允许您按名称或值搜索条目)。

击败 150 KB 的占用空间(包括服务器 + 脚本引擎)将很困难。

于 2011-01-01T18:26:56.040 回答
3

对于 C 或 Lua,Mongoose 是一个选项,https://github.com/valenok/mongoose。每个请求使用超过 5k,主要是因为每个连接的数据有一个用于请求的缓冲区 + 预先分配的标头,并且默认情况下最大请求大小设置为 16k。虽然这是可调的,使它小于 5k 没有问题,只需#define MAX_REQUEST_SIZE 16384在嵌入 Mongoose 时更改 mongoose.c。就占用空间而言,它在磁盘上编译大约 50k,不包括 Lua(如果您需要它)和 SSL(如果您需要它)。运行时占用空间取决于操作系统。

于 2012-10-03T04:38:09.767 回答
3

看看这个。我认为这正是您正在寻找的信息。您不需要功能齐全的 Web 服务器,因此使用 Erlang+libevent/libev 应该很好。

于 2011-03-02T05:23:47.263 回答
2

既然您提到了 Python,您可能想看看web.py,这是一种非常简单的方法来侦听端口 80 并将 URL 映射到操作。

如果你想与标准网络服务器配对(即在 Nginx/FastCGI 之后),它也可以通过你最喜欢的 CGI 运行——我将支持 Nginx 的记录,以在静态文件上实现大规模并发。(他们在 Reddit 上将它与 Lighttpd 一起使用。)

thttpd是我要看的另一个网络服务器,尤其是在内存极其稀缺的情况下,比如在嵌入式系统上。

于 2008-10-30T04:27:10.127 回答
1

如果可以用 C 或 C++ 编写代码,我认为 lighttz 将是最快的并且使用最少的内存。然而,之所以如此,是因为它使用的是 libev,而且它什么都没有,没有 php 支持,没有 html 支持——什么都没有。它提供的只是一个回调函数,您可以在其中处理每个 http 请求。您将不得不解析 http GET/POST 请求并将 html 作为字符串返回。您可以看到它以 nginx、lighttpd、apache 等为基准进行了基准测试,并且排名靠前(链接)。

于 2010-02-05T16:34:42.880 回答
1

Nginx 与 Varnish(Facebook 使用的缓存)和 Apache Traffic Server(Yahoo! 使用的缓存)进行比较:

而且,Nginx 背后的人 Igor Sysoev在他的博客上也不乏评论

于 2011-04-01T17:10:52.927 回答
1

你可以看看 FAPWS(快速异步 Python WSGI 服务器)。该项目的理念完全符合您的需求。 http://www.fapws.org

于 2010-06-21T10:52:33.130 回答
1

看看 koanlogic.com 网站上的 klone ...针对嵌入式系统,它非常小,而且速度也非常快:http: //john.freml.in/teepeedee2-vs-klone。它可以用 C/C++(超高性能)或通常的 PHP/CGI(性能要低得多)编写脚本,具体取决于技能/品味......

于 2009-11-27T17:33:12.743 回答