我正在尝试使用cpan的Net::MQTT::Simple软件包。以下是同一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客户端进行连接。
我觉得我缺少明显的东西。为什么会挂起任何想法/指针?
答案 0 :(得分:2)
它确实执行。由于缓冲,您看不到它的输出。
向print
添加换行符:
print "After new\n";
或启用自动刷新:
$| = 1;
print "After new";
(如果您查看Net::MQTT::Simple
的代码,您会发现构造函数中根本没有阻塞操作。它正在等待$mqtt->run
中的消息,我想没有消息匹配您所订阅的主题,因此似乎“卡住了”)