1

CloudMQTTMQTT broker基于 Pub-Sub 的应用程序中使用它。我正在使用 mypublisher向平台发布数据,并计划CloudMQTT server在我的网页上向代理接收传输的信息。topicsubscribe

我正在使用此过程创建一个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

但是,这种情况下的问题是它仅在网页打开时才接收数据。即使网​​页未打开以始终接收已发布的消息,我也想保持连接状态,我该怎么做?

编辑:如果有人可以推荐一些替代方案,我可能愿意在服务器上使用其他一些技术来处理这个订阅过程

4

1 回答 1

2

PHP 的典型操作模式是启动一个进程,等待 HTTP 连接,处理请求,然后启动一个新进程。这与具有长时间运行进程的典型 MQTT 模式不太匹配;因此在您关闭网页时关闭 MQTT 连接。

可以在长时间运行的 CLI PHP 脚本中订阅 MQTT 主题,但您必须有一些其他机制来保持进程运行。有很多不同的方法可以做到这一点,具体取决于您的偏好和操作系统:

  • 在系统启动时使用 /etc/rc.local 开始的脚本
  • 使用 init.d 脚本
  • 使用进程管理器,例如 DJB 的 daemontools 或 runit
  • 如果您使用的是 Ubuntu,那么 upstart 是一种流行的机制

搜索 stackoverflow 发现以下相关问题和几个答案:

于 2016-10-24T15:38:59.490 回答