Php 打开同一域的多个持久套接字?

Php 打开同一域的多个持久套接字?,php,sockets,persistent-connection,Php,Sockets,Persistent Connection,在使用worker MPM的apache服务器上,是否可能以某种方式向同一TCP地址打开多个持久套接字 当我执行以下操作时: $SocketA = pfsockopen('tcp://domain.com', 80); $SocketB = pfsockopen('tcp://domain.com', 80); 我获得了两个独立的套接字资源,但具有相同的底层连接(我可以判断,因为如果我写入$SocketA,我可以从$SocketB读取远程响应,反之亦然)。我想要两个独立的持久连接 可以这样做吗

在使用worker MPM的apache服务器上,是否可能以某种方式向同一TCP地址打开多个持久套接字

当我执行以下操作时:

$SocketA = pfsockopen('tcp://domain.com', 80);
$SocketB = pfsockopen('tcp://domain.com', 80);
我获得了两个独立的套接字资源,但具有相同的底层连接(我可以判断,因为如果我写入
$SocketA
,我可以从
$SocketB
读取远程响应,反之亦然)。我想要两个独立的持久连接


可以这样做吗?

可以,但第二个持久连接需要使用不同的主机名/ip地址

原因是,如果您要连接的主机完全相同(主机和端口),它将返回现有的持久连接(如果存在),而不是创建新连接

PHP通过基于主机和端口()在内部创建哈希值来跟踪持久连接:

因此,如果您对
$socketB
使用相同的主机和端口,您将从
$socketA
恢复现有连接。PHP将此哈希值与连接一起存储,因此下次调用
pfsockopen
时,它会重新生成哈希值,然后查找,如果找到,则返回旧连接

在socket B上,您可以尝试直接连接到IP地址,或者将其他主机名别名到第一个主机名,以便最终获得两个到同一位置的连接,但是您欺骗PHP创建了两个连接。不过,这两种方法都是权宜之计,并不完全可移植


大多数情况下,答案是“是”和“否”,您不能使用相同的主机和端口来获得2个连接,但您可以使用一种可能会混淆或导致无法预见的问题的技巧来解决此问题。

谢谢您的回答。我试过了,
host
是IP地址(不是域名)。不同的端口可以做到这一点。
spprintf(&hashkey, 0, "pfsockopen__%s:%ld", host, port);