2016-01-02 124 views
1

我正在使用Ratchet package開發聊天應用程序。在教程的幫助下,我編寫了一個自定義的工匠命令來啓動WebSocket服務器。我需要在後臺運行這個Artisan命令,它應該始終運行。我該怎麼做?Laravel 5.1:在後臺運行自定義工匠命令

我嘗試使用Artisan Facade的Artisan::queue and Artisan::call。但是,由於我的自定義命令無限期地運行(很長一段時間),它不起作用。

編輯:

我的託管服務提供商是不是讓我跑工匠命令通過ssh。

下面是自定義的Artisan命令代碼:

<?php 

namespace App\Console\Commands; 

use Illuminate\Console\Command; 

use Ratchet\Http\HttpServer; 
use Ratchet\Server\IoServer; 
use Ratchet\WebSocket\WsServer; 
use App\Classes\Socket\ChatSocket; 
use App\Classes\Socket\Base\BaseSocket; 

class ChatServer extends Command 
{ 
/** 
* The name and signature of the console command. 
* 
* @var string 
*/ 
protected $signature = 'chat_server:serve'; 

/** 
* The console command description. 
* 
* @var string 
*/ 
protected $description = 'Command description'; 

/** 
* Create a new command instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    parent::__construct(); 
} 

/** 
* Execute the console command. 
* 
* @return mixed 
*/ 
public function handle() 
{ 
    $this->info("Start server"); 

    $server = IoServer::factory(
     new HttpServer(
      new WsServer(
       new ChatSocket() 
      ) 
     ), 
     8080 
    ); 

    $server->run(); 
} 
} 

回答

0

您應該簡單地在控制檯命令來運行它:

php artisan chat_server:serve 

,也許你應該確保它會一直工作。其中一種方法是使用Supervisor來確保此命令將始終運行(幾乎)

+0

我應該提到,我無法通過共享託管帳戶中的ssh訪問'Artisan'命令。 – Raghav

+0

我嘗試使用此解決方案:http://stackoverflow.com/questions/32216857/execute-laravel-symfony-artisan-command-in-background。但我無法得到它的工作。 – Raghav

+0

恐怕不能輕易完成。理論上你可以在crone(假設你有cron)中運行例如1分鐘的'$ server-> run();'和'$ server-> stop();'但它不會很可靠,所以你應該考慮轉移到VPS主機,您可以在cron中運行命令並確保它們始終運行 –