gpt4 book ai didi

php - 为什么php的fsockopen返回(资源暂时不可用)?

转载 作者:行者123 更新时间:2023-12-03 11:54:40 25 4
gpt4 key购买 nike

我有一个非常简单的服务器php代码,像这样

function listenForClients()
{
$this->serviceConnection = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($this->serviceConnection, "\tmp\mysock", 0);
socket_listen($this->serviceConnection, 10000000);

while($clientSocket = socket_accept($this->serviceConnection))
{
$clientMessage = socket_read($clientSocket, 1024);
socket_close($clientSocket);
}
}

然后,我有一个非常简单的客户端,可以执行此操作
for ( $counter = 0; $counter <= 1000; $counter ++) {    
$fp = fsockopen("unix///tmp/mysock", 0, $errno, $errstr);

if (!$fp){
echo "Error: Could not open socket connection at " . $counter . "\n";
exit;
}else{
fputs ($fp, "hello", strlen("hello"));
fclose($fp);
}
}

出于某种原因,在随机数量的连接(大约300-500)之后,fsockopen将返回并警告资源暂时不可用。刚开始时,我在20到30个连接处收到警告。但是,一旦我增加了socket_listen中的backlog参数,它就会变得更好一些,大约为300-500。我该如何克服呢?

构建php服务器套接字以每秒接收大量传入连接的方式是什么(持续)。

谢谢!

完整错误:

PHP Warning: fsockopen(): unable to connect to unix:///tmp/mysock:0 (Resource temporarily unavailable) in test.php on line 22

最佳答案

检查您的ulimit。您是否在溢出文件描述符表?

编辑:您在accept()中拥有的积压值是虚假的。大多数OS-es的最大传入连接队列大小为几十个而不是数千个。

关于php - 为什么php的fsockopen返回(资源暂时不可用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/923208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com