PHP - 有人可以为我解释pfsockopen函数吗? (持久插座)

时间:2011-11-11 19:59:00

标签: php sockets

来自PHP.net:

http://www.php.net/manual/en/function.pfsockopen.php

我理解这个功能完成的要点,但是我还不清楚这是否能达到我想要的目的。这是我的情景:

我有一个大型PHP应用程序,许多用户同时使用它。在应用程序中,我打开一个TCP套接字到远程服务器以记录消息等...我希望我能够利用pfsockopen以便需要打开更少的连接。例如,user1登录 - 套接字打开。 User2登录,没有打开套接字,因为他可以“捎带”在user1打开的套接字上。

这可能吗?

1 个答案:

答案 0 :(得分:11)

当脚本结束时,

pfsockopen确实会保持套接字打开,允许它从请求重新使用到另一个请求,有效地打开更少的连接,就像你期望的那样。但是,这与所有SAPI不兼容。

持久性基于每个进程发生。因此,pfsockopen在CLI中运行SAPI将在每次执行时关闭并重新打开套接字,因为CLI脚本在单个进程中执行,该进程启动,打开套接字并结束(关闭套接字以及处理)。

在CGI模式下,每个脚本只有一个进程,这也是如此。

使用Apache SAPI,它取决于使用何种类型的多处理模块(MPM)。 mpm-prefork会在每次请求时生成一个新进程,因此很可能不支持它。但是,mpm-worker会生成线程,所以它可能会在那里工作。 mpm-winnt是多线程MPM的Windows变体,因此它也应该起作用。

最糟糕的情况是,呼叫将以正常的fsockopen呼叫执行。