2009-05-28 35 views
1

我有这样为什么PHP的fsockopen返回(资源暂时不可用)?

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); 
     } 
} 


一个非常简单的服务器的PHP代码,然后,我有一个非常简单的客户端,这是否

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

回答

1

检查ulimit。你溢出你的文件描述符表吗?

编辑:您在accept()积压的价值是假的。大多数操作系统具有数十个规模的最大传入连接队列大小,而不是数千个规模。

+0

它目前设置为“无限制”; – erotsppa 2009-05-28 21:45:57

+0

我应该更清楚。检查打开的文件限制(-n选项,或-a为所有限制)。 – 2009-05-29 00:21:13

0

我刚刚一直在研究这个问题(来到这里通过谷歌),我已经找到了一个解决方案,以摆脱错误的:

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

..是不使用的fsockopen()在作家线程中;尝试这样的代替:

if (! ($cSock = socket_create(AF_UNIX, SOCK_STREAM, 0))) { 
    exit("Failed to create socket"); 
    continue; 
} else if (! socket_connect($cSock, IPC_SOCK)) { 
    exit("Failed to connect socket"); 
} else { 
    $bw = socket_write($cSock, $msg); 
    if ($bw === false) { 
     exit("Socket write failed, %s", array(socket_strerror(socket_last_error()))); 
    } else { 
     exit("Wrote $bw bytes to socket"); 
    } 
} 
socket_shutdown($cSock); 
socket_close($cSock); 

比从未更好的迟到? ;-)

相关问题