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
执行后即可通过订阅验证发送的数据。
关于订阅操作以此类推。
望指正。