Neden PHP'nin fsockopen (Kaynak geçici olarak kullanılamıyor) dönüyor?

1 Cevap php

Ben böyle çok basit bir sunucu php kodu var

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


Then I have a very simple client that does this

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

Nedense, (300-500 civarında) bağlantıların rastgele bir sayıdan sonra fsockopen geçici olarak ulaşılamıyor bir uyarı Kaynak ile dönecektir. Başlangıçta ben yaklaşık 20-30 bağlantılarında uyarı başlamıştı. Ben socket_listen içinde birikim parametreyi arttı ama bir kez yaklaşık 300-500 biraz daha var. Ben bu nasıl aşılır?

Saniyede (sürekli) başına gelen bağlantıları bir sürü kabul etmek için bir php sunucusu soketi oluşturmak için yolu nedir.

Teşekkürler!

Tam hata:

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

1 Cevap

Ben sadece (Google aracılığıyla burada var) bu konuda bakarak oldum ve ben bir çözüm hata kurtulmak için bulduk:

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

.. Yazar parçacığı () fsockopen kullanmak için; yerine böyle bir şey deneyin:

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

Daha geç asla? ;-)