聊聊Laravel中怎么接入workerman

laravel+websocket是即時通訊開發必備利器,那么laravel中怎么接入workerman?下面本篇文章給大家介紹一下laravel快速接入websocket的方法,希望對大家有所幫助。

聊聊Laravel中怎么接入workerman

前言:此處,我們采用基于workerman開發的GatewayWorker作為socket的核心組件,因為,workerman是一個純粹的socket類庫,相對于GatewayWorker來說,更底層,更需要開發者有多進程的編程經驗,而我們大部分開發者使用workerman是為了做IM、或者游戲等,直接基于GatewayWorker開發,更快、更強。

一、安裝gateway-worker

composer?require?workerman/gateway-worker?-vvv

?二、創建Workerman啟動文件

通過下列命令,在AppConsoleCommands下創建命令行文件,并將下方代碼復制到文件中。【相關推薦:《workerman》】

php?artisan?make:command?WorkermanCommand
<?php   namespace AppConsoleCommands;   use GatewayWorkerBusinessWorker; use GatewayWorkerGateway; use GatewayWorkerRegister; use IlluminateConsoleCommand; use WorkermanWorker;   class WorkermanCommand extends Command {       protected $signature = &#39;workman {action} {--d}&#39;; //執行該命令的方式       protected $description = &#39;Start a Workerman server.&#39;;       public function handle()     {         global $argv;         $action = $this->argument('action'); ? ????????$argv[0]?=?'wk'; ????????$argv[1]?=?$action; ????????$argv[2]?=?$this-&gt;option('d')???'-d'?:?'';? ??????//?-d守護模式,不會因為關閉系統命令頁面而被殺掉進程。?沒有-d則關閉命令頁面直接退出進程 ? ????????$this-&gt;start(); ????} ? ????private?function?start() ????{ ????????$this-&gt;startGateWay(); ????????$this-&gt;startBusinessWorker(); ????????$this-&gt;startRegister(); ????????Worker::runAll(); ????} ? ????private?function?startBusinessWorker() ????{ ????????$worker??????????????????=?new?BusinessWorker(); ????????$worker-&gt;name????????????=?'BusinessWorker'; ????????$worker-&gt;count???????????=?1; ????????$worker-&gt;registerAddress?=?'127.0.0.1:1236'; ????????$worker-&gt;eventHandler????=?AppEvents::class;?//用作監聽事件的文件 ????} ? ????private?function?startGateWay() ????{ //因為小程序等一些平臺,要求使用wss進行socket,所以,這里需要配置下wss //此處的cert.pem和key.key是域名的證書文件 ???????$content?=?array( ????????????'ssl'?=&gt;?array( ????????????????'local_cert'?=&gt;?public_path('cert.pem'), ????????????????'local_pk'?=&gt;?public_path('key.key'), ????????????????'verify_peer'?=&gt;?false ????????????) ????????); ????????$gateway?=?new?Gateway("websocket://0.0.0.0:2346",?$content); ????????//如果不需要wss,則不用加入content這個參數 ????????$gateway-&gt;transport?=?'ssl';//不需要wss,也不用加入這個參數。 ????????$gateway-&gt;name?????????????????=?'Gateway'; ????????$gateway-&gt;count????????????????=?1; ????????$gateway-&gt;lanIp????????????????=?'127.0.0.1'; ????????$gateway-&gt;startPort????????????=?2300; ????????$gateway-&gt;pingInterval?????????=?30; ????????$gateway-&gt;pingNotResponseLimit?=?0; ?????????$data?=?array( ????????????'type'?=&gt;?'heart' ????????); ????????$gateway-&gt;pingData?=?json_encode($data,?true); ????????$gateway-&gt;registerAddress??????=?'127.0.0.1:1236'; ????} ? ????private?function?startRegister() ????{ ????????new?Register('text://0.0.0.0:1236'); ????} }

三、創建監聽事件

創建一個app/Events.php文件來監聽處理Workman的各種事件

<?php   namespace AppWorkerman;   class Events {       public static function onWorkerStart($businessWorker)     {     }       public static function onConnect($client_id)     {     }       public static function onWebSocketConnect($client_id, $data)     {     }       public static function onMessage($client_id, $message)     {     }       public static function onClose($client_id)     {     } }

四、啟動workerman

在命令行里面執行,支持的命令有 start | stop | restart,后續加 -d 的意思是守護模式【daemon】

php?artisan?workman?start?-d

五、踩坑關鍵點

1、在LINUX環境中使用。

2、有可能會啟動失敗,此時,請檢查php中,是否禁用了pcntl開頭的相關方法。在 php配置文件中查找到disable_functions,將所有pcntl開頭的方法全部刪除。

六、GatewayWorker手冊

workerman

更多編程相關知識,請訪問:workerman!!

以上就是聊聊Laravel中怎么接入

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享