【问题标题】:high performance (yet dumb) web server高性能(但愚蠢的)网络服务器
【发布时间】:2011-05-26 13:08:39
【问题描述】:

我正在尝试编写一个非常简单的 Web 服务器,它执行以下操作:

  1. 接收请求。
  2. 以小文件响应;关闭连接。
  3. 处理请求数据。

换句话说,响应不依赖于请求信息,但请求信息仍然很重要。数据将被持久化,然后用于分析。

我曾尝试使用一些事件驱动的网络框架来做到这一点,但它们似乎都保持连接直到处理代码返回。这是有道理的,因为通常服务器在响应后不需要做任何工作,但在我的情况下,不需要这种特殊的做事方式。

理想情况下,服务器应不断响应请求,同时将请求数据添加到堆栈中,该堆栈在持久化时被清空。

我们希望每秒处理数千个请求。事件驱动编程真的是要走的路,还是我应该坚持(传统)线程?哪种语言或框架更适合这种工作?

谢谢。

【问题讨论】:

  • 您现在使用哪种平台和语言?
  • nginx是免费的,可以看源码
  • 目前我正在尝试在 Python 中执行此操作,但语言并不是特别重要。 (虽然我真的不想在 C 中做任何事情。:)
  • 一个用户可能会快速连续执行多个请求,还是更像是多个用户每个执行一个请求?
  • @thirtydot,许多用户每个都做一个请求。他们可能会要求提供 Google Analytics 风格的 gif 图片。

标签: concurrency webserver node.js threadpool eventlet


【解决方案1】:

您是否考虑过使用Node.js?它允许您使用 javascript 快速轻松地编写面向 http 的服务器程序。它似乎非常适合您的需求,因为它的行为是可定制的,并且据说可以很好地扩展。

您可能需要考虑阅读一些教程。

【讨论】:

  • 我有;检查问题的标签。 Node.js 看起来很不错,但据我所知,它不支持 Thrift/Cassandra(我在这个项目中使用的数据库)。我也不太确定它是否能够在处理函数中“在返回前响应”。
  • 哦,没注意到。那么,您的问题基本上是“是否使用 node.js”?或者您是否已经将这种方法抛到了窗外,正如您在上面所说的“我正在尝试在 Python 中执行此操作”?如果有,为什么?
  • 缺乏 Cassandra 集成是一个障碍,我想也许我应该坚持使用线程。我是网络编程的新手,所以我试图获得一些不同的观点。
  • stackoverflow.com/questions/2947470/…github.com/danieldkim/cassandra-node-bridge。而在 node.js 中,您可以在处理请求数据之前非常轻松地发送响应。一直这样做:)
【解决方案2】:

我意识到,与其使用回调(或绿色线程,如果你愿意的话)来做任何类型的实际工作,我最好将请求数据委托给一个独立的应用程序。对此的一些研究将我指向了像 beanstalkd 和 RabbitMQ 这样的工作队列。

beanstalkd 似乎比竞争对手更轻、更快,所以我可能会坚持下去。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2011-09-18
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多