【问题标题】:Why do web frameworks serve via FastCGI/SCGI, rather than HTTP?为什么 Web 框架通过 FastCGI/SCGI 而不是 HTTP 提供服务?
【发布时间】:2012-01-19 05:19:56
【问题描述】:

主要的 Web 框架(如 Django、Pyramid、Rails 等)通常作为持久性服务器运行,并使用单独的 Web 服务器(如 nginx)作为前端。 Web 服务器通过 FastCGI 或 SCGI 等协议连接:

browser --[http]--> nginx --[fastcgi]--> flup -> django

这对我来说似乎很复杂;为什么请求转换为完全不同的协议,而后端可以运行自己的 HTTP 服务器?

browser --[http]--> nginx --[http]--> wsgiref -> django

这种方法似乎更简单也更灵活,因为只有一个传输协议,而且是 RFC。

但是,我认为我曾经见过一个 web 框架鼓励仅 http 的设计,所以我认为这一定是有原因的。

在这里使用像 FastCGI/SCGI 这样的协议有什么好处?

【问题讨论】:

  • C++/C 在任何一天都可能胜过那些调试服务器。大多数(全部?)这些网络框架都是用 Python 或 Ruby 编码的,它们是解释性语言。
  • @Blender:虽然是真的,但这可能不相关。我不希望通过 FastCGI 提供服务的 Django 比通过 HTTP 提供服务的 Django 更快或更慢。此外,Python 和 Ruby 都不会被解释。他们使用字节码虚拟机,方式类似于 Java。
  • 好点。我正在努力让 Flask 与 Lighty 一起工作......另外,吹毛求疵,但在 Python 主页上它声明 ... an interpreted, interactive, object-oriented...
  • 是的;该描述可能是从它被解释时开始的。我知道 2.x 编译为字节码,但也许 1.x 不同。
  • 我似乎记得 Pylons/Pyramid “标准”推荐的设置至少是 HTTP-only,使用 Apache 或 nginx 作为反向代理,正如您在此处描述的那样。 Django 的文档似乎也将 *CGI 视为二等公民:“许多人使用共享主机,在共享主机上,FastCGI、SCGI 或 AJP 等协议是唯一可行的选择。”

标签: django http fastcgi scgi


【解决方案1】:

HTTP 是一个large, complex protocol。将接口缩减为 FastCGI 或 WSGI 提供的功能允许框架处理请求比必须处理原始请求更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 2011-12-23
    • 2012-11-02
    • 1970-01-01
    • 2012-02-14
    • 2011-10-11
    • 2016-11-01
    • 2013-03-23
    相关资源
    最近更新 更多