【问题标题】:php persistent connections storage?php持久连接存储?
【发布时间】:2017-04-10 14:34:38
【问题描述】:

我正在阅读有关持久连接的信息,我了解到php 一旦建立连接,它会将其存储为链接,以便执行相同的脚本将使用相同的连接,而不是打开新的连接。 好的,所以一切都很好。

问题是

  1. PHP 在执行后终止时如何保持连接处于活动状态。

  2. 我可以在哪个目录/缓存/数据库中看到这些连接(出于好奇)?

请考虑 nginx/php-fpm 架构。

【问题讨论】:

  • 您想到的连接类型是什么?
  • @arkascha :我只是在问,我能知道 PHP 在哪里存储持久连接以便它们可以被重用。假设我使用 MongoClient PHP 类连接到 MongoDB。它说,出于好奇,它利用了持久连接,这个类将这些持久连接存储在哪里。换句话说,我如何验证 MongoClient 是否正在建立持久连接。
  • 啊,所以您说的是从 php 到某些资源的连接,例如数据库服务器。还有其他类型,这就是我问的原因。就像 http 协议中的持久“保持活动”模式一样。或套接字连接。

标签: php


【解决方案1】:

请考虑 nginx/php-fpm 架构。

太棒了!

  1. PHP 在执行后终止时如何保持连接处于活动状态。

在这种情况下 PHP 不会终止。子进程,一个处理实际请求的进程,它不会退出(除非配置为这样做)。因此,如果它没有退出,它会尽可能保持连接打开(这是简化的 yes 类型的答案)。

  1. 我可以在哪个目录/缓存/数据库中看到这些连接(出于好奇)?

您在目录中看不到它。您可以使用lsof 查看它。通过ps aux | grep php 查找任何子进程的pid

使用lsof -p process_id 可以看到打开的文件描述符。其中,会有对 MySQL 等的连接。

如果您使用 MySQL 并且想查看已建立的连接,可以执行 SHOW PROCESSLIST;

【讨论】:

  • 谢谢,我使用 lsof 验证了第二个问题的答案。我可以看到 MongoDB 的 TCP 连接。我还是没看懂第一部分。您能否详细说明一下。就像 nginx 将请求传递给 php-fpm 进程一样。它执行 php 脚本然后发生了什么?
  • 好的,由php-fpm 生成的子进程接收请求,找到它必须使用的所有.php 文件,解析它们,将它们存储到opcache,执行它必须的代码并发送回复到nginx,但此时它不会终止。该过程保持活力。资源不会被清理(再次,这是简化的)。因此,当下一个请求进来时,代码已经被解析并且可以从 opcache 中拉取,某些连接已经建立,因此不需要握手,并且您可以加速 php-fpm 子进程处理的后续请求。
  • 谢谢,现在很清楚了。所以基本上,是 php-fpm 进程本身解析、编译、执行、保持数据库连接以供将来使用并捕获输出以返回给 nginx。最初,我曾经认为,php-fpm 进程会启动另一个 php-interpreter,它会完成所有的解析、编译和执行工作,这完全让我感到困惑。谢谢
  • php-fpm 启动这些进程。当他们退出时,php-fpm 收到一个信号,表明孩子发生了什么事。这也是为什么php-fpm 不能在 Windows 上工作的原因——Windows 没有实现 POSIX 兼容的 API 来进行进程控制,因此你不能做整个父子的事情。它充当监督者,可以启动一个新进程,使整个过程永远工作。 php-fpm 顾名思义,是 manager 和子进程负责完成繁重的工作。在子进程之间共享连接会非常棘手。如果每个人都有自己的,那就更容易了。
  • 感谢@Mjh 的澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2017-05-28
  • 2014-04-28
  • 2011-04-21
  • 1970-01-01
相关资源
最近更新 更多