首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持MQTT客户端连接始终处于活动状态

保持MQTT客户端连接始终处于活动状态
EN

Stack Overflow用户
提问于 2016-10-24 15:05:14
回答 1查看 4.8K关注 0票数 1

在基于Pub的应用程序中,我使用CloudMQTT作为MQTT broker。我正在使用我的publisher通过一个topicCloudMQTT server发布数据,并且我计划在我的网页上向代理发布数据,以接收所传输的信息。

我正在使用这个过程创建一个Client(订阅者):https://www.cloudmqtt.com/docs-php.html

代码如下:

代码语言:javascript
复制
// 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

但是,这种情况下的问题是,只有当网页打开时,它才会接收数据。我想保持连接的活力,即使网页不开放总是收到已发布的信息,我怎么做呢?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 15:38:59

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

可以在长期运行的CLI脚本中订阅MQTT主题,但是您必须有一些其他机制来保持进程的运行。根据您的首选项和操作系统,有很多不同的方法可以做到这一点:

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

搜索堆栈溢出可以找到以下相关问题和几个答案:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40221652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档