我了解FastCGI在其他网关接口上的性能方面的目的。但是,如果实施FastCGI的库已经需要经过实施安全高效TCP服务的艰辛措施,那为什么不把应用程序写成Web服务器呢?前端Web服务器实现逆向代理的效率比FCGI低吗?还是FCGI的规范比HTTP简单得多?
解决方法
我有一个Web服务器程序,我替换了一个FCGI程序。部分原因是因为程序的要求。它需要在现有的Web服务器下运行,因为这样做不需要额外的配置。
另一个要求是能够跟踪可能频繁变化的一些状态值。现有的程序效率不高,可以从外部跟踪这些状态值,并为每个请求重新加载它们。 FCGI程序的一个优点是它是持久的,所以它可以轮询这些状态值,它们将可用并为每个请求做好准备。
我没有实现任何FCGI规范,我只是使用了一个现有的FCGI库,它处理了与我的Web服务器的所有通信。与我写的嵌入式Web服务器的其他应用程序相比,使用FCGI库实现的应用程序相对简单。
FCGI的另一个优点是FCGI应用程序不需要实际驻留在Web服务器可访问的磁盘上。您可以将服务器配置为与其他服务器上的FCGI应用程序的实例建立TCP连接。如果您处于无法直接访问Web服务器的情况,这可能非常有用。用其他方法完成同样的事情可能很麻烦,但FCGI应用程序甚至不需要修改。只需配置服务器,启动您的应用程序在FCGI主机下,你很好去。
FCGI的另一个优点是您可以配置Web服务器以在预定数量的应用程序实例之间分发请求。如果您的Web应用程序通过同时处理每个请求最有效,FCGI是理想的,因为您可以将每个请求转发到单个实例中,并且该实例可以在单个循环中处理每个请求。如果您想要最多2个,3个或n个实例,您需要做的是更改服务器上的值,您可以实现这一点。
所以,FCGI不是最适合每一种情况。这是你遇到的不寻常的要求,FCGI是最有吸引力的时代。