Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php持久连接存储?_Php - Fatal编程技术网

php持久连接存储?

php持久连接存储?,php,Php,我正在阅读有关持久性连接的文章,我了解到,一旦建立了连接,它就会将其存储为链接,以便相同脚本的执行将使用相同的连接,而不是打开新的连接。 好的,一切都很好 问题是 PHP如何在执行后终止时保持连接的活动性 在哪里,在哪个目录/cache/database中,我可以看到这些连接(出于好奇) 请考虑NGNX/PHP FPM体系结构。 请考虑NGNX/PHP FPM体系结构。< /P> 好极了 PHP如何在执行后终止时保持连接的活动性 在这种情况下,PHP不会终止。处理实际请求的子进程不会退出(除非配

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

问题是

  • PHP如何在执行后终止时保持连接的活动性

  • 在哪里,在哪个目录/cache/database中,我可以看到这些连接(出于好奇)

  • 请考虑NGNX/PHP FPM体系结构。

    请考虑NGNX/PHP FPM体系结构。< /P> 好极了

  • PHP如何在执行后终止时保持连接的活动性
  • 在这种情况下,PHP不会终止。处理实际请求的子进程不会退出(除非配置为退出)。因此,如果它没有退出,它会尽可能保持连接打开(这是简化的“是”类型的答案)

  • 在哪里,在哪个目录/cache/database中,我可以看到这些连接(出于好奇)
  • 在目录中看不到它。您可以使用
    lsof
    查看它。通过
    ps aux | grep php
    查找任何子进程的
    pid

    使用
    lsof-p process\u id
    可以看到打开的文件描述符。其中,将有连接到MySQL等


    如果您使用的是MySQL,并且希望看到已建立的连接,那么可以执行
    showProcessList

    你在这里想的是什么类型的连接?@arkascha:我只是问,我能知道PHP在哪里存储持久连接以便它们可以被重用吗。假设我使用MongoClient PHP类连接到MongoDB。它说,出于好奇,它使用了持久连接,这个类在哪里存储这些持久连接。换句话说,我如何验证MongoClient是否正在进行持久性连接。啊,那么您谈论的是从php到某些资源的连接,例如数据库服务器。还有其他类型的,这就是为什么我问。就像http协议中的持久“保持活动”模式。或者插座连接。谢谢,我用lsof验证了第二个问题的答案。我可以看到MongoDB的TCP连接。我还是不懂第一部分。你能详细说明一下吗。就像nginx将请求传递给php fpm进程一样。它执行php脚本,然后接下来发生了什么?好的,
    php fpm
    生成的子进程接收请求,找到它必须处理的所有
    .php
    文件,解析它们,将它们存储到opcache,执行它必须执行的代码,并将响应发送回
    nginx
    ,但它不会在此时终止。这个过程保持活力。资源不会被清理(同样,这是简化的)。因此,当下一个请求进入时,代码已经被解析并可以从opcache中提取,某些连接已经建立,因此不需要握手,并且您可以在后续请求上通过
    php fpm
    子进程处理时获得加速。谢谢,现在已经清楚了。所以基本上,php fpm进程本身负责解析、编译、执行、保持数据库连接以备将来使用,并捕获输出以返回nginx。起初,我曾经认为,php fpm进程启动了另一个php解释器,它完成了所有解析、编译和执行工作,这让我完全困惑。感谢php fpm启动这些进程。当他们退出时,
    php-fpm
    接收到一个信号,表明孩子出了什么事。这也是为什么
    php fpm
    不能在windows上工作的原因-windows没有为进程控制实现符合POSIX的API,因此您无法完成整个父子关系。它充当一个监管者,可以启动一个新的流程,使整个过程永远工作
    phpfpm
    顾名思义,管理器和子进程是完成繁重工作的部分。在子进程之间共享连接是相当棘手的。如果每个都有自己的,就更容易了。谢谢@Mjh的澄清