2016-02-17 15 views
0

Я хочу подключиться к IBM Bluemix через протокол MQTT, используя PHP для подписки на сообщения, поступающие из IoT Foundation. Я использую этот код:MQTT Подписываться с PHP на IBM Bluemix

<?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"; 
} 

?> 

Но браузер показывать это сообщение:

Fatal error: Maximum execution time of 30 seconds exceeded in /Library/WebServer/Documents/phpMQTT/phpMQTT.php on line 167

ответ

0

Вы не дают очень много информации о том, что вы хотите достичь, делая это; хотите ли вы отправлять сообщения в браузер до тех пор, пока страница не будет закрыта в браузере?

Отправленные сервером события или веб-сайты могут быть лучше, и PHP может быть не лучшим выбором для этого, потому что он использует довольно много памяти для каждого соединения (например, по сравнению с node.js).

Однако, если вы просто хотите, чтобы удалить 30-секундный тайм-аут PHP, то вы можете использовать эту функцию: http://php.net/manual/en/function.set-time-limit.php

Или установить max_execution_time в php.ini: http://php.net/manual/en/info.configuration.php

Установка максимального времени выполнения для 0 должен остановить его от тайм-аута.

Но будьте осторожны, PHP и/или ваш веб-сервер будут иметь ограниченное количество одновременных HTTP-соединений.

1

подписка не предназначена для запуска в веб-браузере, поскольку она имеет бесконечный вид, ее лучше всего запускать из командной строки.

Если вы используете метод subscribe для приема сообщений, вы можете посмотреть постоянные сообщения и вырваться из цикла на получение msg.

Существует пример того, как использовать phpMQTT в веб-браузере в файле веб-app.php этого respository https://github.com/vvaswani/bluemix-iotf-device-tracker

+0

Я пытаюсь этот пример. Но иногда я не получаю значения. Я сохраняю флаг сохранения true для моего издателя, чтобы гарантировать, что брокер не удаляет значения, но все же он терпит неудачу. Любые подсказки, почему это происходит. Я разместил отдельную тему здесь http://stackoverflow.com/questions/42532305/php-mqtt-subscribe-not-consistent/ – Sid411