У меня очень простой серверный 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 подключений. Но как только я увеличил параметр backlog в socket_listen, он стал немного лучше, примерно до 300-500. Как мне это преодолеть?
Какой способ построить сокет php-сервера для приема большого количества входящих соединений в секунду (устойчивый).
Спасибо!
Полная ошибка:
Предупреждение PHP: fsockopen (): невозможно
подключиться к unix: /// tmp / mysock: 0
(Ресурс временно недоступен) в
test.php в строке 22 * 1017 *