Неблокирующий абонент MQTT [PHP]

Я использую Raspberry Pi, чтобы выступить в качестве брокера MQTT для группы датчиков. Идея состоит в том, чтобы иметь форму с полем ввода на веб-сайте, и на основе значения поля ввода при отправке клиент должен опубликовать сообщение для брокера MQTT, а затем начать подписку на ту же тему.

Затем веб-сайт должен дождаться ответа от сервера MQTT (то есть message sent = «temp»), а RBP публикует новое сообщение «Temp is 35 градусов Цельсия».

Однако, когда я вызываю функцию подписчика, PHP получает фатальную ошибку Fatal error: Maximum execution time of 30 seconds exceeded

Похоже, PHP слишком долго блокирует скрипт, поэтому завершает работу до получения сообщения. Мне нужен PHP-скрипт для прослушивания максимум 1-2 минуты, а затем он может закрыть соединение MQTT.

<?php
require("phpMQTT.php");

$server = "xx.xx.xx.xx";
$port = 1883;
$username = "username";
$password = "password";
$client_id = uniqid();

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

//Read message from form, which type of sensor to read
$msg = $_POST['sensor'];

if (!empty($msg)) {
if ($mqtt->connect(true, null, $username, $password)) {
//Publish type of sensor to read
$mqtt->publish("dev/sensors", $msg , 0);
$mqtt->close();
}

//Start listen for response
subscribeToTopic($mqtt);
}

function subscribeToTopic($mqtt)
{
//Set topic to listen to
$topics['dev/sensors'] = array("qos" => 0, "function" => "procmsg");
$mqtt->subscribe($topics, 0);

//Listen for the response in the subscribed topic
while ($mqtt->proc()) {

}
$mqtt->close();

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

//Close mqtt-connection after message is received
$mqtt->close();
}

?>

Если использование MQTT невозможно для подключений к веб-сайту / серверу MQTT, что может быть более подходящей альтернативой для достижения этой логики?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector