2016-06-01 5 views
0

私はPHPサーバーを作成したいと思います。 サーバーを非同期で起動するコマンドを作成しました。 サーバーを停止するように指示したいと思います。 startコマンドを実行した後でプロセスを取得できません。あなたの助けのための開始コマンドの後のサーバープロセスへのアクセス

コマンドの実行

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

サーバ・クラス

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

ありがとう!

答えて

0

私は私の問題を解決しました。

サーバを起動すると、システムのtmpディレクトリにファイルが作成されます。 私のループでは、このファイルが既に存在するかどうかチェックしません。それが削除された場合、私はループを止めます。

サーバーを停止するには、ファイルを削除するだけです。

別のサーバーを開くには、これをホストとポートで指定します(例:〜/ 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); 
    } 

} 

スタートコマンド:

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

停止コマンド:

$host = '127.0.0.1'; 
$port = 5821; 
$lockFile = Loop::getLockFile($host.":".$port); 
unlink($lockFile); 
echo "Server Stopped"; 
関連する問題