MQTT使用PHP订阅IBM Bluemix

时间:2016-02-17 14:28:55

标签: php ibm-cloud mqtt iot phpmqtt

我希望通过MQTT协议使用PHP连接到IBM Bluemix来订阅来自IoT Foundation的消息。 我使用这段代码:

<?php

require("../phpMQTT.php");


$config = array(
  'org_id' => 't9m318',
  'port' => '1883',
  'app_id' => 'phpmqtt',
  'iotf_api_key' => 'my api key',
  'iotf_api_secret' => 'my api secret',
  'device_id' => 'phpmqtt'
);

$config['server'] = $config['org_id'] .'.messaging.internetofthings.ibmcloud.com';
$config['client_id'] = 'a:' . $config['org_id'] . ':' .$config['app_id'];
$location = array();

// initialize client
$mqtt = new phpMQTT($config['server'], $config['port'], $config['client_id']); 
$mqtt->debug = false;

// connect to broker
if(!$mqtt->connect(true, null, $config['iotf_api_key'], $config['iotf_api_secret'])){
  echo 'ERROR: Could not connect to IoT cloud';
    exit();
} 

$topics['iot-2/type/+/id/phpmqtt/evt/+/fmt/json'] = 
  array("qos"=>0, "function"=>"procmsg");
$mqtt->subscribe($topics, 0);

// process messages
while ($mqtt->proc(true)) { 

}
// disconnect
$mqtt->close();
function procmsg($topic, $msg) {
 echo "Msg Recieved: $msg";
}

?>

但浏览器显示此消息:

  

致命错误:第167行的/Library/WebServer/Documents/phpMQTT/phpMQTT.php超出了30秒的最长执行时间

2 个答案:

答案 0 :(得分:1)

订阅并不意味着在Web浏览器中运行,因为它具有无限的外观,最好从命令行运行。

如果您使用subscribe方法接收消息,您可以查看持久消息并在msg收据上打开循环。

有一个如何在文件中的Web浏览器中使用phpMQTT的示例 此存储库https://github.com/vvaswani/bluemix-iotf-device-tracker

的web-app.php

答案 1 :(得分:0)

通过这样做,您不会提供有关您想要实现的目标的大量信息;在浏览器中关闭页面之前,您是否希望继续向浏览器发送消息?

服务器发送事件或Websockets可能是更好的选择,并且PHP可能不是最佳选择,因为它每个连接占用了大量内存(例如,与node.js相比)。

但是,如果您只想删除30秒的PHP超时,则可以使用此功能: http://php.net/manual/en/function.set-time-limit.php

或者在php.ini中设置max_execution_time: http://php.net/manual/en/info.configuration.php

将最大执行时间设置为0应该使其不能超时。

但请注意,PHP和/或您的网络服务器将具有有限数量的并发HTTP连接。