我有一个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秒钟,但它不起作用(该应用程序看起来好像已挂起)。
我知道我需要做一些事情来告诉应用程序,使其保持活力并保持冷静,但我不知道该命令是什么:-)
如果您使用不支持AE的内容(例如sleep
)进行阻止,则不会处理AE事件。
在允许处理AE事件的同时入睡,通常使用
my $done_cv = AE::cv;
$done_cv->recv;
使用$done_cv->send;
结束睡眠。例如,如果您想睡5秒钟,则可以使用
my $sleep_cv = AE::cv;
my $w = AE::timer(5, 0, $sleep_cv); # Short for AE::timer(5, 0, sub { $sleep_cv->send });
$sleep_cv->recv;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句