我想通过MQTT协议连接IBM,使用PHP订阅来自IoT基金会的消息。我使用以下代码:
<?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秒的最大执行时间
发布于 2016-04-20 19:27:17
订阅并不意味着要在web浏览器中运行,因为它的外观是无限的,最好是从命令行运行。
如果您使用订阅方法接收消息,您可以查看持久的msgs,并在msg接收上跳出循环。
有一个示例说明如何在此respository https://github.com/vvaswani/bluemix-iotf-device-tracker的web浏览器中使用web-app.php文件中的https://github.com/vvaswani/bluemix-iotf-device-tracker。
发布于 2016-02-17 21:45:34
您没有提供太多关于通过这样做要实现什么的信息;是否要一直向浏览器发送消息,直到浏览器中的页面关闭为止?
服务器发送事件或Websockets可能是更好的选择,而PHP可能不是最好的选择,因为每个连接占用了相当多的内存(例如,与node.js相比)。
但是,如果您只想删除30秒的PHP,则可以使用以下函数:http://php.net/manual/en/function.set-time-limit.php
或在php.ini:http://php.net/manual/en/info.configuration.php中设置http://php.net/manual/en/info.configuration.php
将最大执行时间设置为0应阻止其超时。
但是请注意,PHP和/或您的PHP服务器将有有限数量的并发HTTP连接。
https://stackoverflow.com/questions/35459449
复制相似问题