Laravel 5.6 中优雅的管理 swoole 进程 - weixin_41282397的博客 - CSDN博客

php artisan make:command SwooleManger //默认在app/Console/Commans目录下创建SwooleManger.php文件。

    <?php    namespace App\Console\Commands;        use Illuminate\Console\Command;    use Illuminate\Support\Facades\App;    class SwooleManger extends Command    {        private $server;         private $pid_file;        /**         * The name and signature of the console command.         *         * @var string         */        protected $signature = 'swoole {action}';         /**         * The console command description.         *         * @var string         */        protected $description = 'start or stop the swoole process';         /**         * Create a new command instance.         *         * @return void         */        public function __construct()        {            parent::__construct();            $this->pid_file =  __DIR__.'/../../../storage/swoole_websocket.pid';        }         /**         * Execute the console command.         *         * @return mixed         */        public function handle()        {            //获取传递的操作            $arg = $this->argument('action');             switch ($arg){                case 'start':                    //检测进程是否已开启                    $pid = $this->getPid();                    if($pid && \Swoole\Process::kill($pid,0))                    {                        $this->error("\r\nprocess already exist!\r\n");                        exit;                    }                     $this->server = new \swoole_websocket_server("0.0.0.0", 9501);                    $this->server->set([                        'worker_num'=>8,                        'daemonize' =>1,                        'max_request'=>1000,                        'dispatch_mode'=>2,                        'pid_file' =>$this->pid_file,                    ]);                     //绑定操作类回调函数                    $app = App::make('App\Handles\SwooleWebSocketHandle');                     $this->server->on('open',array($app,'onOpen'));                     $this->server->on('message',array($app,'onMessage'));                     $this->server->on('close',array($app,'onClose'));                     $this->info("\r\nprocess created successful!\r\n");                     $this->server->start();                    break;                 case 'stop':                    if(!$pid = $this->getPid())                    {                        $this->error("\r\nprocess not started!\r\n");                        exit;                    }                    if(\Swoole\Process::kill((int)$pid))                    {                        $this->info("\r\nprocess close successful!\r\n");                        exit;                    }                    $this->info("\r\nprocess close failed!\r\n");                    break;                 default:                    $this->error("\r\noperation method does not exist!\r\n");            }         }         //获取pid        private function getPid()        {            return file_exists($this->pid_file) ? file_get_contents($this->pid_file) :false;        }    }

以上命令定义完成可使用artisan来管理swoole websocket服务的开启和关闭

php artisan swoole start  //开启php artisan swoole stop //关闭

2.使用Handles类来处理swoole的事件处理

//在SwooleManger中使用了 $app = App::make('App\Handles\SwooleWebSocketHandle'); //将SwooleWebsocketHandle注入到SwooleManger中

使用$this->server->on 注册事件回调函数,创建App\Handles\SwooleWebSocketHandle文件实现webSocket的事件即可

参考文献:

https://laravel-china.org/articles/18686


原网址: 访问
创建于: 2019-04-07 23:16:41
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论