为什么Web框架通过FastCGI/SCGI而不是HTTP提供服务?

8

主要的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-only设计,所以我认为一定有原因。
在这里使用FastCGI/SCGI协议的优点是什么?

2
C++/C 可能在任何时候都比那些调试服务器表现更出色。大多数(全部?)的 Web 框架都是用 Python 或 Ruby 编写的,这些语言都是解释型语言。 - Blender
@Blender:虽然是真的,但这可能不相关。我不会期望通过FastCGI提供Django比通过HTTP提供Django更快或更慢。此外,Python和Ruby都不是解释型语言。它们使用字节码虚拟机,类似于Java的方式。 - John Millikin
1
好的观点。我正在努力让Flask与Lighty配合工作,感觉像是一头撞在墙上。另外,虽然有点挑剔,但在Python主页上它声明“...一个解释型、交互式、面向对象的...” - Blender
是的,那个描述可能还停留在解释执行时期。我知道2.x会编译成字节码,但也许1.x不同。 - John Millikin
我记得Pylons/Pyramid的“标准”推荐至少使用Apache或nginx作为反向代理来进行仅限HTTP的设置,就像您在这里描述的一样。Django的文档似乎也将*CGI视为二等公民:“许多人使用共享主机,在这些主机上,FastCGI、SCGI或AJP等协议是唯一可行的选项。” - John Flatness
CGI 在 Django 中是二等公民; 它被编写成为 WSGI,而其他所有东西都需要一个适配器。 - Ignacio Vazquez-Abrams
1个回答

8

HTTP是一个庞大且复杂的协议。将接口简化为FastCGI或WSGI提供的功能,使框架能够比处理原始请求更快地处理请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接