私はこのなぜ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のバックログパラメータを増やしてしまえば、300-500程度に改善しました。どのように私はこれを克服するのですか?
1秒間に多数の着信接続を受け入れるために、PHPサーバソケットを構築する方法は何ですか?
ありがとうございます!
フルエラー:
PHP Warning: fsockopen(): unable to connect to unix:///tmp/mysock:0 (Resource temporarily unavailable) in test.php on line 22
現在、「無制限」に設定されています。 – erotsppa
私はより明確にすべきだった。開いているファイルの制限(-nオプション、またはすべての制限について-a)を確認してください。 –
open -nは1024に設定されていますが、同じファイルソケットを複数回開くとこの制限が使用されますか?特に私は別のものを開いた後、それぞれを閉じた後に?興味深い。 – erotsppa