我有一个perl脚本,它使用AnyEvent::MQTT订阅消息队列。
在这一分钟,我想要它做的是打印出来,当它得到一个信息。我对perl完全陌生,所以我使用它附带的演示代码,其中包括将STDIN上的任何内容作为消息发布的bit --这很好,我可以看到收到的所有消息。
此代码如下所示
#!/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之后删除所有内容,那么我的应用程序一运行就会退出。
我试过包括一个like循环,它能睡上5秒,但这不起作用(这个应用程序看起来就像是挂起的)。
我知道我需要做些什么来告诉这个应用程序,只是为了保持活力和冷静,但我不知道这个命令是什么:-)
发布于 2016-01-17 17:46:12
如果你用一些不知道声发射的东西(例如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;https://stackoverflow.com/questions/34841185
复制相似问题