TP6+workerman+MQTT集成

1.安装think-worker

composer require topthink/think-worker

2.安装mqtt

composer require workerman/mqtt

 

3.新建类文件

image

 4.编写业务逻辑

<?php

namespace app\worker\controller;


use app\common\service\Mqtt as MqttService;
use app\common\service\netgame\EntertainmentMqttService;
use think\worker\Server;
use Workerman\Mqtt\Client;
use Workerman\Worker;



class Mqtt extends Server
{
    const down_topic = 'card/down/313xxxx;
    const up_topic = 'card/up/31323636XXXXXX';
    const occupy_time = 300; //占用时长
    const inner_topic = 'sub/exchange/loginStatus'; //内部交互主题

    private $connection = null;
    public function onWorkerStart($worker)
    {
        $server = env('MQTT.server');    // MQTT服务器地址
        $port = env('MQTT.port');             // MQTT服务器端口
        $username = env('MQTT.username');           // MQTT用户名(如果需要)
        $password = env('MQTT.password');
        $client_id = time();

        $options = [
            'keepalive' => 60,
            'client_id' => $client_id,
            'clean_session' => true,
            'reconnect_period' => 10,
            'username' => $username,
            "password" => $password
        ];
        $address = "mqtt://$server:$port";
        $mqtt = new Client($address,$options); // mqtt://mqt.test.com:1883 这个域名请填写自己Broker的 域名
        $this->connection = $mqtt;
        // 订阅mqtt主题消息
        $mqtt->onConnect = function($mqtt) {
            $mqtt->subscribe(self::up_topic);
        };
        $mqtt->onMessage = function($topic, $content){   // 在此监听主题消息
            echo "------订阅的主题消息-------".$topic.PHP_EOL;
            echo "------响应的消息-------".$content.PHP_EOL;

            $data = json_decode($content,true);
             //XXXXXXXXX
        };
        $mqtt->connect();
    }
}

  5.常见报错信息及修复

    1) Error: Class ‘Workerman\Timer’ not found in F:\study\mqtt\tp\vendor\workerman\mqtt\src\Client

    解决方案:版本问题,修改2行代码即可:找到tp\vendor\workerman\mqtt\src\Client.php文件修改:
    use \Workerman\Protocols\Mqtt;
    use \Workerman\Timer;
    // 修改后
     use \Workerman\Mqtt\Protocols\Mqtt;

     use \Workerman\Lib\Timer;

  2) 端口修改不生效
    解决方案:
      修改vendor/topthink/think-worker/src/Server.php 里面$port

      

posted @ 2025-12-05 14:08  龙卷风之殇  阅读(2)  评论(0)    收藏  举报