1.安装tp8
composer create-project topthink/think tp
2.安装tp集成的workerman:(自带GatewayWorker)
composer require topthink/think-worker
3.安装GatewayClient(TCP绑定设备下发指令用)
composer require workerman/gatewayclient
4.安装workerman/mqtt:
composer require workerman/mqtt
介绍:GatewayWorker使用经典的Gateway和Worker进程模型。Gateway进程负责维持客户端连接,并转发客户端的数据给BusinessWorker进程处理,BusinessWorker进程负责处理实际的业务逻辑(默认调用Events.php处理业务),并将结果推送给对应的客户端。Gateway服务和BusinessWorker服务可以分开部署在不同的服务器上,实现分布式集群。
要注意的几个点: 1.businessWorker Events里onWorkerStart启动时同时连接mqtt服务器 : php think worker:gateway
namespace app\\worker;
use GatewayWorker\\Lib\\Gateway;
use Workerman\\Worker;
use think\\facade\\Db;
use Workerman\\Mqtt\\Client as MqttClient;
use Workerman\\Lib\\Timer;
use think\\facade\\Log;
use app\\model\\Company as CompanyModel;
/**
* Worker 命令行服务类
*/
class TcpEvents
{
private static $mqtt = null;
/**
* @var true
*/
private static bool $mqtt_connected;
/**
* onWorkerStart 事件回调
* 当businessWorker进程启动时触发。每个进程生命周期内都只会触发一次
*
* @access public
* @param \\Workerman\\Worker $businessWorker
* @return void
*/
public static function onWorkerStart(Worker $businessWorker)
{
$options = [
\’username\’ => \’MQTT\’,
\’password\’ => \’MQTTPW\’,
];
$mqtt = new MqttClient(\’mqtt://0.0.0.0:1883\’,$options);
$mqtt->onConnect = function($mqtt) {
$mqtt->subscribe(\’YK/#\’);
self::$mqtt_connected = true;//mqtt连接成功 下面判断用
};
$mqtt->onMessage = function($topic, $content, $mqtt){
var_dump($topic.\’主题信息:\’, $content);
if($content == \’getParam\’){
$arr = array(\’topic\’=>\’TPR/869219071430769/setParam\’, \’content\’=>\'{\”F
评论前必须登录!
注册