Net :: MQTT :: Simple-> new () зависает? - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь использовать пакет Net :: MQTT :: Simple из cpan.Ниже приведена модифицированная версия примера «Объектно-ориентированный» на той же странице cpan:

use Net::MQTT::Simple;

my $mqtt = Net::MQTT::Simple->new("test.mosquitto.org");

#This doesn't actually execute

print "After new";

$mqtt->run(
    "test" => sub {
        my ($topic, $message) = @_;
        die "The building's on fire" if $message > 150;
    },
    "#" => sub {
        my ($topic, $message) = @_;
        print "[$topic] $message\n";
    },
);

Кажется, что мой скрипт никогда не соединяется или, по крайней мере, строка print никогда не выполняется.Об ошибке не сообщается, и программа просто зависает.Имя сервера правильное, так как я могу подключиться через клиента mosquitto_sub.

Я чувствую, что упускаю что-то очевидное.Любые идеи / указатели, почему это будет зависать?

1 Ответ

2 голосов
/ 06 мая 2019

Это действительно выполняется.Вы не видите выход из-за буферизации.

Либо добавьте новую строку в print:

print "After new\n";

, либо включите автозапуск:

$| = 1;
print "After new";

(Если вы посмотрите на код Net::MQTT::Simple you 'Вы увидите, что в конструкторе вообще нет операций блокировки. Он ждет сообщений в $mqtt->run, я думаю, что нет сообщений, соответствующих темам, на которые вы подписаны, поэтому он "застрял")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...