当前位置: 首页 > 工具软件 > Workerman > 使用案例 >

thinkphp5+workerman集成workerman/mqtt爬坑笔记

阴凯歌
2023-12-01

1. thinkphp5.0安装workerman   

composer require topthink/think-worker=1.0.*
(tp5.0安装workerman时要指定版本号,不然会报错)

2. 安装workerman/mqtt

composer require workerman/mqtt

按照官方文档http://doc3.workerman.net/696635#publish 测试报错,无法启动mqtt。

需要做一下修改

1.cp vendor/workerman/mqtt/src/Protocols/Mqtt.php  vendor/workerman/workerman/Protocols

2.vim vendor/workerman/workerman/Protocols   把 namespace Workerman\Mqtt\Protocols; 改为 namespace Workerman\Protocols;

3. vim /etc/php.ini (配置文件位置视个人环境而定);

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Shanghai"
;date_default_timezone_set('UTC')

修改完成后再重新按官方文档运行。但是发现无法在代码中使用Db方法。

经研究和各种尝试,结合tp官方文档https://www.kancloud.cn/manual/thinkphp5/235128和workerman官方文档http://doc3.workerman.net/696635得出以下调整,可兼容tp内的库类。

贴代码:

项目根目录下创建mqtt_publish.php

#!/usr/bin/env php
<?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','push/Mqttp');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';

新建控制器 push/Mqttp

<?php

namespace app\push\controller;

use think\Db;
use Workerman\Mqtt\Client;
use Workerman\Worker;

class Mqttp
{
    /**
     * 架构函数
     * @access public
     */
    public function __construct()
    {
        $worker = new Worker();
        $worker->onWorkerStart = function(){
            $mqtt = new Client('mqtt://test.mosquitto.org:1883');

            $mqtt->onConnect = function($mqtt) {
                $mqtt->publish('test', 'hello workerman mqtt');
            };

            $mqtt->connect();
        };
        Worker::runAll();
    }

}

执行:

php mqtt_publish.php start

执行后即可通过订阅验证发送的数据。

关于订阅操作以此类推。

望指正。

 类似资料: