2016-06-01 12 views
0

Ich möchte einen PHP-Server erstellen. Ich machte einen Befehl, um den Server asynchron zu starten. Ich möchte eine Bestellung aufgeben, um den Server zu stoppen. Ich kann den Prozess nicht nach dem Starten des Befehls starten.Zugriff auf einen Serverprozess nach Startbefehl

Befehl ausführen

$server = new Server(); 
$pid = pcntl_fork(); 
if ($pid > 0) { 
    echo "Server Runned"; 
    return; 
} 
$server->Run(); 

Serverklasse

class Server { 
    private $_loop; 
    private $_socket; 

    public function __construct() { 
     $this->_loop = Factory::create(); 
     $this->_socket = new ReactServer($this->_loop); 
     $this->_socket->on(
      'connection',function ($conn) { 
       echo "Connection"; 
      } 
     ); 
    } 

    public static function Stop() { 
     $this->_loop-> stop(); 
    } 
    public function Run() { 
     $this->_loop->run(); 
    } 
} 

Vielen Dank für Ihre Hilfe!

Antwort

0

Ich habe meine Probleme gelöst.

Wenn ich meinen Server starte, erstelle ich eine Datei im tmp-Verzeichnis des Systems. In meiner Schleife überprüfe ich, ob diese Datei bereits vorhanden ist. Wenn es entfernt wurde, stoppe ich meine Schleife.

Also, um meinen Server zu stoppen, kann ich nur die Datei entfernen.

Um verschiedene Server zu öffnen, benenne ich dies mit Host und Ports (zum Beispiel: ~/127-0-0-1-8080.pid).

class Loop 
{ 
    private $lockFile; 

    public static function getLockFile($address) 
    { 
     return sys_get_temp_dir().'/'.strtr($address, '.:', '--').'.pid'; 
    } 

    public function __construct($address) 
    { 
     $this->lockFile = Loop::getLockFile($address); 
     touch($this->lockFile); 
     //... 
    } 
    public function run() 
    { 
     $this->running = true; 
     while ($this->running) { 

      if (!file_exists($this->lockFile)) { 
       $this->running = false; 
       echo "File Removed"; 
      } 
      //... 
     } 
    } 
    public function stop() 
    { 
     $this->running = false; 
     unlink($this->lockFile); 
    } 

} 

Startbefehl:

$server = new Server($em, $port, $host); 
$pid = pcntl_fork(); 
if ($pid > 0) { 
    $address = $host.":".$port; 
    echo "Server Starting " . $adresse; 
} 
$server->Run(); 

Stopp-Befehl:

$host = '127.0.0.1'; 
$port = 5821; 
$lockFile = Loop::getLockFile($host.":".$port); 
unlink($lockFile); 
echo "Server Stopped"; 
Verwandte Themen