robson_ek 0 Zgłoś post Napisano Grudzień 31, 2008 #!/usr/local/bin/php <?php set_time_limit(0); $sckMain = socket_create(AF_INET, SOCK_STREAM, 0) or die(); socket_bind($sckMain, 'localhost', 1000) or die(); socket_listen($sckMain) or die(); $oaClients = array(); while(true) { $sckaRead = array(); $sckaRead[0] = $sckMain; foreach($oaClients as $x => $oClient) { if($oClient -> bClosed == true) { unset($oaClients[$x]); } else { $sckaRead[] = $oClient -> sckSocket; } } socket_select($sckaRead, $null = null, $null = null, 0); if(in_array($sckMain, $sckaRead)) { $sckNewClient = socket_accept($sckMain); $oaClients[] = new clientHandler($sckNewClient); } foreach($oaClients as $oClient) { if(in_array($oClient -> sckSocket, $sckaRead)) { $oClient -> handle(); } } } socket_close($sckMain); class clientHandler { var $bClosed = false; var $sckSocket = ''; function clientHandler($sckSocket) { $this -> sckSocket = $sckSocket; } function handle() { $sCommand = $this -> read(); $sParameters = explode('|', $sCommand); if($sCommand !='') { if($sParameters[0] == 'A') { //komedna na shelu $this->send("add"); $this->disconnect(); } elseif($sParameters[0] == 'D') { //komenda na shelu $this->send("del"); $this->disconnect(); } } } function send($sMessage) { socket_write($this->sckSocket, "w|".$sMessage); } function read() { return trim(@socket_read($this->sckSocket, 1024)); } function disconnect() { $this->bClosed = true; socket_close($this->sckSocket); } } ?> Napisałem takiego DEAMONa i wszystko fajnie działa, ale użycie procesora jest cały czas 100%. Można jakoś zoptymalizować ten kod żeby zmniejszyć użycie? Dzięki Udostępnij ten post Link to postu Udostępnij na innych stronach
p 3 Zgłoś post Napisano Grudzień 31, 2008 while(true) { } Udostępnij ten post Link to postu Udostępnij na innych stronach
robson_ek 0 Zgłoś post Napisano Grudzień 31, 2008 while(true) { } warunek jest taki że musi to działać Udostępnij ten post Link to postu Udostępnij na innych stronach
p 3 Zgłoś post Napisano Grudzień 31, 2008 warunek jest taki że musi to działać Nie pytałeś 'dlaczego nie działa' tylko 'jak to zoptymalizować' i na to pytanie udzieliłem odpowiedzi Udostępnij ten post Link to postu Udostępnij na innych stronach