保持 MQTT 客户端连接始终处于活动状态
Keep a MQTT Client Connection always active
我在基于 Pub-Sub 的应用程序中使用 CloudMQTT
作为 MQTT broker
。我正在使用我的 publisher
通过 topic
将数据发布到 CloudMQTT server
,我计划 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 连接。
可以在长 运行 CLI PHP 脚本中订阅 MQTT 主题,但您必须有一些其他机制来保持进程 运行。有很多不同的方法可以做到这一点,具体取决于您的偏好和操作系统:
- 脚本在系统启动时使用 /etc/rc.local 开始
- 使用 init.d 脚本
- 使用进程管理器,例如 DJB 的 daemontools 或 runit
- 如果您正在使用Ubuntu,那么新贵是一种流行的机制
搜索 Whosebug 找到以下相关问题和几个答案:
- Run php script as daemon process
我在基于 Pub-Sub 的应用程序中使用 CloudMQTT
作为 MQTT broker
。我正在使用我的 publisher
通过 topic
将数据发布到 CloudMQTT server
,我计划 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 连接。
可以在长 运行 CLI PHP 脚本中订阅 MQTT 主题,但您必须有一些其他机制来保持进程 运行。有很多不同的方法可以做到这一点,具体取决于您的偏好和操作系统:
- 脚本在系统启动时使用 /etc/rc.local 开始
- 使用 init.d 脚本
- 使用进程管理器,例如 DJB 的 daemontools 或 runit
- 如果您正在使用Ubuntu,那么新贵是一种流行的机制
搜索 Whosebug 找到以下相关问题和几个答案:
- Run php script as daemon process