я использую CloudMQTT
как MQTT broker
в моем приложении на основе Pub-Sub. Я использую свой publisher
публиковать данные в CloudMQTT server
через topic
и я планирую subscribe
брокеру на моей веб-странице, чтобы получить переданную информацию.
Я использую эту процедуру для создания Client
(Абонент): https://www.cloudmqtt.com/docs-php.html
Код выглядит следующим образом:
// subscribe.php
require("phpMQTT.php");
$host = "hostname";
$port = port;
$username = "username";
$password = "password";
$mqtt = new phpMQTT($host, $port, "ClientID".rand());
if(!$mqtt->connect(true,NULL,$username,$password)){
exit(1);
}
//currently subscribed topics
$topics['topic'] = array("qos"=>0, "function"=>"procmsg");
$mqtt->subscribe($topics,0);
while($mqtt->proc()){
}
$mqtt->close();
function procmsg($topic,$msg){
echo "Msg Recieved: $msg";
}
Здесь phpMQTT.php
файл: https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php
Однако проблема в этом случае заключается в том, что он получает данные только тогда, когда веб-страница открыта. Я хочу сохранить соединение активным, даже если веб-страница не открыта, чтобы всегда получать опубликованные сообщения, как я могу это сделать?
РЕДАКТИРОВАТЬ : Я мог бы быть открыт для использования какой-либо другой технологии на сервере для обработки этого процесса подписки, если кто-то может порекомендовать некоторые альтернативы
Типичный режим работы PHP — запуск процесса, ожидание HTTP-соединения, обработка запроса и запуск нового процесса. Это не вписывается в типичный режим MQTT с длительным процессом; следовательно, закрытие соединения MQTT при закрытии веб-страницы.
Можно подписаться на тему MQTT в долгоиграющем PHP-скрипте CLI, но у вас должен быть какой-то другой механизм для поддержания процесса в рабочем состоянии. Есть много разных способов сделать это, в зависимости от ваших предпочтений и операционной системы:
Поиск в stackoverflow находит следующий связанный вопрос и несколько ответов:
Других решений пока нет …