php mqtt workerman,使用workerman\mqtt遇到的问题。

写了一段程序。在循环在redis读取数据,并根据数据发送主题。mqtt服务器 用的是 Mosquitto

遇到了两个问题。

1 当qos为2时候发不出去,0或1的时候就可以。

2 程序运行一段时间 就会提示 Mqtt client: No connection to broker

代码在下面,请看看是哪里用的不对。

class LabelServer

{

function __construct(&$task)

{

$this->worker = $task;

$redis = new Redis();

$this->redis = $redis;

$redis->connect('127.0.0.1', 6379);

$mqtt = new \Workerman\Mqtt\Client('mqtt://127.0.0.1:1883', );

$mqtt->connect();

$db = \Tools::openDatabase(\Config::$CONFIG, \Config::$CONFIG, \Config::$CONFIG, \Config::$CONFIG);

$this->db = $db;

$mqtt->onConnect = function ($mqtt) use ($redis, $task, $db) {

while (true) {

while ($redis->LLEN("mqttqueue") > 0) {

$value = $redis->RPOP("mqttqueue");

if ($value) {

Tools::Console("process $value workerid {$task->id}");

$avalue = json_decode($value, true);

$method = $avalue;

switch ($method) {

case "device.register":

$this->doDeviceRegister($mqtt, $avalue, $avalue);

break;

default:

Tools::Console("doOther $method");

}

}

}

usleep(100000);

}

};

}

private function doDeviceRegister($mqtt, $topic, $payload)

{

Tools::Console("doRegister workerid {$this->worker->id}");

$insertData = [];

$insertData = $topic;

$insertData = json_encode($payload);;

$this->db->insert("u")->cols($insertData)->query();

$deviceid = $payload;

$mqtt->publish("/mtt/shoptalk/$deviceid/device/register_reply", "{ \"id\": \"\", \"version\": \"1.0\", \"params\": { \"code\":200, \"message\":\"注册成功\" } , \"time\":1524448721000 , \"method\": \"device.register_reply\" }", );

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值