0

我正在使用 phpMQTT 订阅来自 MQTT 代理的数据。我已经根据他们的基本实现成功地设置了一个 pub/sub 例程。我可以在 procsg() 函数中很好地回显信息。

但是,我需要获取收到的数据并将其用于运行一些数据库操作等。我似乎无法访问在 procmsg() 函数之外收到的主题或消息。如下使用 return 似乎没有产生任何结果。

<?php
function procmsg($topic, $msg){
  $value = $msg * 10;
  return $value;
}

echo procmsg($topic, $msg);
echo $value;
?>

显然我做错了什么 - 但我如何获得这些值以便我可以在 procmsg() 之外使用它们?非常感谢。

4

1 回答 1

1

我不知道那个库,但是在那个代码 https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php中,它可能会看到它是如何工作的。

在 :

$topics['edafdff398fb22847a2f98a15ca3186e/#'] = array("qos"=>0, "function"=>"procmsg");

您告诉它主题“edafdff398fb22847a2f98a15ca3186e/#”的服务质量 (qos) = 0,以及一个名为“procmsg”的“事件”。这就是你后来写这篇文章的原因

function procmsg($topic,$msg){ ... }

因此在 while($mqtt->proc()) 中,此函数将检查每次是否有新消息(第 332 行调用消息函数,然后调用源代码的 procmsg)

这就是为什么你不能在你的代码中调用 procmsg 的原因

换句话说,也许在 procmsg 内,您可以调用函数来处理消息 ej :

function procmsg($topic,$msg){ 
    $value = $msg * 10;
    doStuffWithDataAndDatabase($value);
}

请注意,您可以简单地更改函数的名称 ej :

$topics['edafdff398fb22847a2f98a15ca3186e/#'] = array("qos"=>0, "function"=>"onMessage");

接着 :

function onMessage($topic,$msg){ 
    $value = $msg * 10;
    doStuffWithDataAndDatabase($value);
}

对不起我的英语,希望对您有所帮助!

于 2017-05-09T09:03:49.187 回答