文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【黄啊码】windows如何使用tp5.1配置workerman和gateway(不要看官方文档,不要抄网友文档,OK?)

2023-09-08 22:15

关注

大家好,我是黄啊码,由于项目需要被迫无奈在老项目上整合workerman,整整浪费了我一天,按着tp官方文档去做,一个又一个的坑,然后百度网友的答案,又是一个又一个的天坑,真的无力吐槽,今天我就把自己的经历写在这里,网友们,别再踩坑了。

目录

第一坑:composer

第二坑:官方代码问题

第三坑: 网友代码问题

第四坑:自定义events类


第一坑:composer

composer require topthink/think-worker=2.0.*

这是官方文档给的,我照搬,一顿操作下来,没啥毛病,但是:由于官方对应的版本是比较老的,配置文件又是新的,导致以下位置找不到文件:

原因:官方为了避免Event和关键字Events冲突,直接将Event改成了Events,结果就是会导致Events::onMessage is not callable。

 好了,这是天坑,先给大家指出来,咱们先做直接走起:

composer require topthink/think-worker=2.0.8composer require workerman/gateway-worker=3.0

记住:是2.0.8和3.0,高也不要,低也不要,也不要用*号,不然就会出现上边的问题,那你们就自己排查吧,欲哭无泪的那种。

以下是我compoers出来的workerman版本,仅供参考:

接下来开始启动吧:

think-worker默认有命令

php think worker:gateway

急急如律令,肯定是这个:

结果:丢,这是啥玩意儿:

GatewayWorker Not Support On Windows

这并不是说gateway不能再windows上运行,而是gateway需要启动好几个命令行,windows下无法直接处理,先做咱们就开始走起来吧

先自定义命令行文件:

setName('worker:gateway_win')            ->addArgument('service', Argument::OPTIONAL, 'workerman service: gateway|register|business_worker', null)            ->addOption('host', 'H', Option::VALUE_OPTIONAL, 'the host of workerman server.', null)            ->addOption('port', 'p', Option::VALUE_OPTIONAL, 'the port of workerman server.', null)            ->setDescription('GatewayWorker Server for ThinkPHP runs on Windows system');    }        public function execute(Input $input, Output $output)    {        $service = $input->getArgument('service');        $option = Config::pull('gateway_worker');        if ($input->hasOption('host')) {            $host = $input->getOption('host');        } else {            $host = !empty($option['host']) ? $option['host'] : '0.0.0.0';        }        if ($input->hasOption('port')) {            $port = $input->getOption('port');        } else {            $port = !empty($option['port']) ? $option['port'] : '2347';        }        $registerAddress = !empty($option['registerAddress']) ? $option['registerAddress'] : '127.0.0.1:1236';        switch ($service) {            case 'register':                $this->register($registerAddress);                break;            case 'business_worker':                $this->businessWorker($registerAddress, isset($option['businessWorker']) ? $option['businessWorker'] : []);                break;            case 'gateway':                $this->gateway($registerAddress, $host, $port, $option);                break;            default:                $output->writeln("Invalid argument action:{$service}, Expected gateway|register|business_worker.");                exit(1);                break;        }        Worker::runAll();    }}

 位置在这里,别走错路了:

 然后配置对应的命令行:改config/console.php文件,添加workerman命令

好了,到此配置结果,开动:

php think workerman registerphp think workerman businessworkerphp think workerman gateway

第一步:没问题:

 第二步:没问题:

第三步:。。。。丢,这是啥玩意儿:

一步一步排查,排查到这里:

原来是GatewayWorker.php的option获取的东西是空的:

第二坑:官方代码问题

原来官方的代码是Config:get('gatewayworker'),而这里是:

第三坑: 网友代码问题

到这里你应该觉得结束了,但是。。。运行还是报错,还是同样的错误,看来看去这代码没问题啊,难道是Config这个函数出错,输出了一下,果然是空的,不对,tp5的语法不是Config::get('文件名.变量名')吗?怎么这里是这样,我一度怀疑是官方文档更新了,查了文档

Config::set()   设置配置项Config::get() 获取配置项Config::pull() 仅仅只获取一级配置项Config::has() 判断配置项是否存在

so》》》获取文件里边所有的配置项不是pull吗? 好了,直接改:

再次运行,额,虽然可以,但运行的依旧是 think\worker里边的Events,也就是根本没有正确获取到变量BusinessWorker里边的值

看了下gateway_worker.php里边的变量名称,全都是小写,难道是BusinessWorker是大写的原因 

 

 好,我改还不行吗?:php think workerman gateway

欲哭无泪啊,怎么会有如此低级的错误?来源:代码是抄网友的。。。

第四坑:自定义events类

由于events类放在源文件里边,整个目录结果看上去很奇怪,位置如下:

如果我们想自定义那就必须写一个类继承events类,只需要将其放在http文件夹中,然后修改配置文件:

然而重启你就会发现又报错了:

这又是啥?原来Events类里边有个类名称叫application

所以我们在继承events时也要告诉自己的代码,这个application是位于哪里的:

这么一顿操作,改成如下:

重启,完美收官:

所以,如果你的tp框架是5.1+的,不建议你抄网文,因为天下文章一般抄,球球你们,别抄了,看我吧!!如果还是要抄,文档给你们

ThinkPHP 5.1 Workerman 快速上手指南 · ThinkPHP5.1 Workerman上手指南 · 看云

出门右拐,别再来了哈。 

好了,今天的分享就这里,有问题的留个言,别忘了一键三连,下次我们还会再见!

我是黄啊码,码字的码,退。。。退。。。退。。。朝

来源地址:https://blog.csdn.net/TiaoZhanJi_Xian/article/details/128837525

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯