Laravel接入workerman
短信预约 -IT技能 免费直播动态提醒
前言:此处,我们采用基于workerman开发的GatewayWorker作为socket的核心组件,因为,workerman是一个纯粹的socket类库,相对于GatewayWorker来说,更底层,更需要开发者有多进程的编程经验,而我们大部分开发者使用workerman是为了做IM、或者游戏等,直接基于GatewayWorker开发,更快、更强。
一、安装gateway-worker
composer require workerman/gateway-worker -vvv
二、创建Workerman启动文件
通过下列命令,在App\Console\Commands下创建命令行文件,并将下方代码复制到文件中。
php artisan make:command WorkermanCommand
argument('action'); $argv[0] = 'wk'; $argv[1] = $action; $argv[2] = $this->option('d') ? '-d' : ''; // -d守护模式,不会因为关闭系统命令页面而被杀掉进程。 没有-d则关闭命令页面直接退出进程 $this->start(); } private function start() { $this->startGateWay(); $this->startBusinessWorker(); $this->startRegister(); Worker::runAll(); } private function startBusinessWorker() { $worker = new BusinessWorker(); $worker->name = 'BusinessWorker'; $worker->count = 1; $worker->registerAddress = '127.0.0.1:1236'; $worker->eventHandler = \App\Events::class; //用作监听事件的文件 } private function startGateWay() {//因为小程序等一些平台,要求使用wss进行socket,所以,这里需要配置下wss//此处的cert.pem和key.key是域名的证书文件 $content = array( 'ssl' => array( 'local_cert' => public_path('cert.pem'), 'local_pk' => public_path('key.key'), 'verify_peer' => false ) ); $gateway = new Gateway("websocket://0.0.0.0:2346", $content); //如果不需要wss,则不用加入content这个参数 $gateway->transport = 'ssl';//不需要wss,也不用加入这个参数。 $gateway->name = 'Gateway'; $gateway->count = 1; $gateway->lanIp = '127.0.0.1'; $gateway->startPort = 2300; $gateway->pingInterval = 30; $gateway->pingNotResponseLimit = 0; $data = array( 'type' => 'heart' ); $gateway->pingData = json_encode($data, true); $gateway->registerAddress = '127.0.0.1:1236'; } private function startRegister() { new Register('text://0.0.0.0:1236'); }}
三、创建监听事件
创建一个app/Events.php文件来监听处理Workman的各种事件
四、启动workerman
在命令行里面执行,支持的命令有 start | stop | restart,后续加 -d 的意思是守护模式【daemon】
php artisan workman start -d
五、踩坑关键点
在LINUX环境中使用。
有可能会启动失败,此时,请检查php中,是否禁用了pcntl开头的相关方法。在 php配置文件中查找到disable_functions,将所有pcntl开头的方法全部删除。
六、GatewayWorker手册
来源地址:https://blog.csdn.net/qq82982885/article/details/127071222
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341