phpMQTT неблокирующая публикация и получение - PullRequest
0 голосов
/ 08 ноября 2018

Я пишу программу, соединяющую веб-сервис на PHP с брокером MQTT. Брокер управляет москитом на Raspberry Pi.

Идея состоит в том, чтобы веб-служба отправила запрос (форма была отправлена), а затем отправила публикацию брокеру MQTT, а затем дождалась ответа.

Однако проблема в том, что цикл, по-видимому, приводит к фатальной ошибке PHP из-за того, что это бесконечный цикл.

Я пытался добавить функцию quitstop (), чтобы выйти из цикла после получения сообщения, но программа вылетает до того, как достигает этой точки.

MQTT все еще очень нов для меня, но мне нужно отправить запрос, а затем держать цикл открытым, пока я не получу ответ, чтобы продолжить работу с моей программой.

Это код для отправки формы:

require("phpMQTT.php");

$server = "xxx.xxx.xxx.xx";              // change if necessary
$port = 1883;                       // change if necessary
$username = "username";             // set your username
$password = "password";             // set your password
$client_id = "phpMQTT-request-1234";     // make sure this is unique for connecting to sever - you could use uniqid()

$mqtt = new phpMQTT($server, $port, $client_id);

$msg = $_POST['box'];
if (!empty($msg)) {
    if ($mqtt->connect(true, null, $username, $password)) {
        $mqtt->publish("dev/test", $msg, 0);
        $mqtt->close();
    }
    subscribeToTopic($mqtt);
}

function subscribeToTopic($mqtt)
{
    $topics['dev/test'] = array("qos" => 0, "function" => "procmsg");
    $mqtt->subscribe($topics, 0);
    while ($mqtt->proc()) {

    }
    $mqtt->close();

}
function procmsg($topic, $msg)
{
    global $mqtt;
    echo $msg;
    quitstop($mqtt);
}

function quitstop($mqtt)
{
    $mqtt->close();
}
...