如何在 PHP 中构建自己的 FastCGI 接口?
我想做一些类似于他们在 Perl 中所做的事情,但在 PHP 中。甚至可能吗?会更快吗?
(也就是说,我希望能够将 Web 应用程序框架加载到内存中,然后让 FastCGI 调用我为每个请求提供的方法。所以不是更通用的 PHP 解释器预加载发生在“默认”PHP FastCGI 设置。)
干杯!
(编辑:Mongrel 和 RoR 不也在这样做吗?)
好的,我现在制作了一个怪异的图表:)
如何在 PHP 中构建自己的 FastCGI 接口?
我想做一些类似于他们在 Perl 中所做的事情,但在 PHP 中。甚至可能吗?会更快吗?
(也就是说,我希望能够将 Web 应用程序框架加载到内存中,然后让 FastCGI 调用我为每个请求提供的方法。所以不是更通用的 PHP 解释器预加载发生在“默认”PHP FastCGI 设置。)
干杯!
(编辑:Mongrel 和 RoR 不也在这样做吗?)
好的,我现在制作了一个怪异的图表:)
我可能弄错了(为时已晚),但您不只是尝试进行某种形式的缓存吗?不管怎样,FastCGI 接口似乎定义得相当好。所以,应该可以很容易地做任何你想做的事情。
您不能在PHP中为PHP执行此操作,您可以在 C 中为cgi-sapi执行此操作,但您可能想改用APC。
如果你真的决定用 PHP,理论上你可以在c 中创建一个 php 模块,并在 c 中为fastCGI 搭建桥梁。
之后我猜测,您将运行一个 PHP 脚本作为独立程序访问 fastCGI,运行一个循环并接受请求。其中您使用 PHP 作为“持久虚拟机”(找不到更好的术语),通过 fastCGI 进行通信。
我确实同意重新加载您的几个依赖库/等,这是一个非常容易被忽视的性能消耗。但是,它可能是有意设计的,以简化 PHP 开发周期。想想没有经验的用户在持久环境中会造成的全局变量混乱。事实上,大多数 fastCGI 设置都会根据负载初始化多个副本/线程。它是一小罐蠕虫。为每个请求开始一个空白的新列表可以简化它。
但是,老实说...如果您担心性能,您不妨考虑 fastCGI C++ / node.js,作为替代品...。为 JavaScript/PHP/C++ 开发后,您的想法绝对是可能的...但是它真的归结为成本效益......值得付出努力吗?等。
PS:你也可以考虑通过 hip-hop 编译你的 PHP 网站。