TP6+workerman+MQTT集成
1.安装think-worker
composer require topthink/think-worker
2.安装mqtt
composer require workerman/mqtt
3.新建类文件

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
龙卷风之殇

浙公网安备 33010602011771号