Net :: MQTT :: Simple-> new()挂起?

时间:2019-05-06 12:09:19

标签: perl mqtt

我正在尝试使用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客户端进行连接。

我觉得我缺少明显的东西。为什么会挂起任何想法/指针?

1 个答案:

答案 0 :(得分:2)

它确实执行。由于缓冲,您看不到它的输出。

print添加换行符:

print "After new\n";

或启用自动刷新:

$| = 1;
print "After new";

(如果您查看Net::MQTT::Simple的代码,您会发现构造函数中根本没有阻塞操作。它正在等待$mqtt->run中的消息,我想没有消息匹配您所订阅的主题,因此似乎“卡住了”)