云计算百科
云计算领域专业知识百科平台

thinkphp8 利用think-worker 单服务器同时可使用tcp(Gateway)websocket和mqtt客户端 实现物联网设备接入和主动下发指令(推送消息)

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

赞(0)
未经允许不得转载:网硕互联帮助中心 » thinkphp8 利用think-worker 单服务器同时可使用tcp(Gateway)websocket和mqtt客户端 实现物联网设备接入和主动下发指令(推送消息)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!