J'ai un code serveur php très simple comme celui-ciPourquoi le fsockopen de php revient-il (ressource momentanément indisponible)?
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);
}
}
J'ai un client très simple qui fait cela
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);
}
}
Pour une raison quelconque, après un nombre aléatoire de connexions (autour 300-500) fsockopen retournera avec une ressource d'avertissement temporairement indisponible. Au début, je recevais l'avertissement à environ 20-30 connexions. Mais une fois que j'ai augmenté le paramètre de backlog dans socket_listen, il est un peu mieux à environ 300-500. Comment puis-je surmonter cela? Quelle est la façon de construire un socket serveur PHP pour accepter un grand nombre de connexions entrantes par seconde (soutenue).
Merci!
L'erreur complète:
PHP Warning: fsockopen(): unable to connect to unix:///tmp/mysock:0 (Resource temporarily unavailable) in test.php on line 22
Il est actuellement défini sur "unlimited"; – erotsppa
J'aurais dû être plus clair. Vérifiez la limite de fichiers ouverts (option -n, ou -a pour toutes les limites.) –
open -n est défini sur 1024, mais l'ouverture multiple du même socket utilise-t-elle cette limite? Surtout après avoir fermé chacun d'eux après en avoir ouvert un autre? – erotsppa