我打算在嵌入式环境中使用php。我们当前的 Web 服务器是 thttpd。我现在正在考虑两个选择:是否将其作为 cgi 或 SAPI 模块运行。我知道cgi在安全性方面有优势。但是如果我们使用 php 作为 cgi,则每个请求都应该将 php 的实例加载到内存中。

我尝试将其编译为 thttpd 的 SAPI 模块,并且观察到 thttpd 的内存使用量(特别是 rss)不会随着请求数量的增加而增加。

有人能解释一下 thttpd 如何加载 php 吗?它是否只加载一次并在 thttpd 运行期间一直驻留在内存中?如果是这样,我们可以考虑将其作为 cgi 的替代方案。

它是否执行多线程,即如果同时有多个http请求呢?或者它一次处理一个请求吗?

有没有一个很好的文档讨论 php 作为 thttpd 模块的行为?

有帮助吗?

解决方案

我没有使用 thttpd 的经验,但这里有一些提示:

  • PHP 引擎是线程安全的,但某些扩展不是线程安全的,因此通常人们回避在多线程环境中使用它,而宁愿采用单进程 - 一个请求的方法
  • 是的,通常 Web 服务器模块(如 Apache mod_* 的东西)通过驻留来工作,但 PHP 的最大障碍是它需要为每个请求解析源文件(或者甚至多个源文件,如果您使用 include / require)。你可以通过使用类似的东西来减少这个 APC 它缓存文件的解析版本
  • 还有一个名为 FastCGI 的协议,您可能想看看 - 它基本上是模块和 CGI​​ 解决方案之间的交叉 - 它启动几个进程,每个进程托管 CGI 问题的单个实例(在本例中为 PHP) )并使用它们来处理请求。实例被回收(即他们可以处理多个请求,一个接一个)。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top