Perl FCGI和PSGI之间的基准测试

3
我所了解的FCGI协议是,在第一次调用应用程序时,它将其加载到内存中,运行并将响应返回给服务器,完成响应但不会结束应用程序,而是将其保留在内存中运行,然后下一个请求将使用此编译在内存中的应用程序副本来处理请求。
阅读PSGI协议的相关内容,它似乎也是以相同的方式工作。
我的问题是,我是否正确地假设它们在应用程序速度方面对每秒请求数是相同的。
令人困惑的问题还在于,如果它们工作方式相同,为什么我看到plackup有启用FCGI的命令行选项。
1个回答

10

你现在是在比较苹果和水果,这个问题并没有太多意义。

有不同的机制可用于部署使用 Perl 编写的 Web 应用程序。

  • 它可以是一个独立的 CGI 程序
  • 它可以运行在 mod_perl 下
  • 它可以在 FCGI 下运行
  • 等等......

问题在于,对于每个部署机制,您需要更改程序编写的方式。这意味着您需要知道您所针对的是 mod_perl,然后再开始编写代码。这也意味着在这些不同的部署方法之间移动应用程序并不是易如反掌的。

这就是 PSGI 所解决的问题。您只需编写针对 PSGI 协议的应用程序,而不是编写针对 CGI、mod_perl 或 FCGI 的应用程序。您可以在 CGI、mod_perl 或 FcGI(或许多其他部署方法)下完全相同地部署此应用程序。

如果您使用 FCGI 处理程序部署 PSGI 应用程序,则它将像 FCGI 应用程序一样工作。但以后将其移动到作为 mod_perl 应用程序运行或者使用类似 Starman 的东西作为独立服务器运行都很简单。

这样有帮助吗?


我知道 PSGI 有适配器可以用于 cgi,fcgi,mod_perl,但是你没有回答问题,使用 PSGI 在其下运行 fcgi 应用程序的好处是什么?直接在 fcgi 下运行 fcgi 应用程序不是更好吗?你的解释说 PSGI 的唯一好处是相同的应用程序可以在这些协议下运行,这意味着如果我想在 fcgi 下运行应用程序,则根本不需要考虑 PSGI,我对吗? - daliaessam
1
@daliaessam,你没有在 PSGI 下运行 _fcgi app_。你是在 fgci 或独立的 Perl 服务器上运行你的 Perl 应用程序(使用 PSGI 编写)。使用 PSGI,你可以获得一个“标准”,它允许许多很酷的东西,例如使用 Plack::Middlewares 等。在我看来,运行(开发和部署)任何 Perl Web 应用程序最简单的方法是使用 PSGI。 - clt60
1
编写符合PSGI规范的程序还有很多其他好处。首先,可以使用大量的中间件插件生态系统。 - Dave Cross
1
如果你写给 PSGI,那么当你改变后端时就不必修改代码。这就是为什么像 CatalystDancer 这样的框架现在都针对 PSGI。对于它们来说,这意味着它们不必维护代码以针对多个后端(它们曾经这样做)。 - Brad Gilbert

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