У меня есть perl-скрипт, который подписывается на очередь сообщений с помощью AnyEvent::MQTT.
В данный момент все, что я хочу, это распечатать, когда он получит сообщение. Я новичок в Perl, поэтому я использую демонстрационный код, который включает в себя бит, который публикует что-либо в STDIN в виде сообщения - это прекрасно работает, и я могу видеть все полученные сообщения.
Этот код выглядит следующим образом
#!/usr/bin/perl
use strict;
use warnings;
use AnyEvent::MQTT;
my $mqtt = AnyEvent::MQTT->new;
my $cv = $mqtt->subscribe(topic => '/AlarmMode',
callback => sub {
my ($topic, $message) = @_;
print $topic, ' ', $message, "\n"
});
my $qos = $cv->recv; # subscribed, negotiated QoS == $qos
# publish line-by-line from file handle
$cv = $mqtt->publish(handle => \*STDIN,
topic => '/topic');
У меня проблема в том, что если я удалю все после комментария publish line-by-line from file handle, мое приложение выйдет, как только оно запустится.
Я попытался включить цикл while, который спит в течение 5 секунд, но это не работает (приложение выглядит так, как будто оно зависло).
Я знаю, что мне нужно сделать что-то, чтобы сказать приложению просто остаться в живых и расслабиться, но я не знаю, что это за команда :-)