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

tam*_*ler 6 php sockets

来自PHP.net:

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

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

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

这可能吗?

net*_*der 11

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

持久性发生在每个进程的基础上.因此,pfsockopen在CLI中运行SAPI将在每次执行时关闭并重新打开套接字,因为CLI脚本在单个进程中执行,该进程启动,打开套接字并结束(与进程一起关闭套接字).

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

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

可能发生的最坏情况是呼叫将作为普通fsockopen呼叫执行.

  • pfsockopen与Prefork MPM一起使用,但是每个子进程都有自己的持久套接字. (2认同)