1

PHP の Web サービスを MQTT ブローカーに接続するプログラムを作成しています。ブローカーは Raspberry Pi で Mosquitto を実行しています。

Web サービスがリクエストを送信し (フォームが送信される)、MQTT ブローカーにパブリッシュを送信し、応答を待つという考え方です。

ただし、問題は、ループが無限ループであるため、ループが PHP の致命的なエラーを引き起こしているように見えることです。

メッセージの受信後にループを終了する quitstop() 関数を追加しようとしましたが、その時点に到達する前にプログラムがクラッシュします。

MQTT は私にとってまだ非常に新しいものですが、プログラムを続行するには、要求を送信し、応答を受け取るまでループを開いたままにしておく必要があります。

これは、フォームの送信を処理するコードです。

require("phpMQTT.php");

$server = "xxx.xxx.xxx.xx";              // change if necessary
$port = 1883;                       // change if necessary
$username = "username";             // set your username
$password = "password";             // set your password
$client_id = "phpMQTT-request-1234";     // make sure this is unique for connecting to sever - you could use uniqid()

$mqtt = new phpMQTT($server, $port, $client_id);

$msg = $_POST['box'];
if (!empty($msg)) {
    if ($mqtt->connect(true, null, $username, $password)) {
        $mqtt->publish("dev/test", $msg, 0);
        $mqtt->close();
    }
    subscribeToTopic($mqtt);
}

function subscribeToTopic($mqtt)
{
    $topics['dev/test'] = array("qos" => 0, "function" => "procmsg");
    $mqtt->subscribe($topics, 0);
    while ($mqtt->proc()) {

    }
    $mqtt->close();

}
function procmsg($topic, $msg)
{
    global $mqtt;
    echo $msg;
    quitstop($mqtt);
}

function quitstop($mqtt)
{
    $mqtt->close();
}
4

0 に答える 0