python – Mosquitto和last will(遗嘱)的问题

我正在使用Mosquitto和Paho的 Python实现来尝试传达几个程序.当我使用最后一个功能时,我遇到了一些麻烦.我的代码是这样的:

会员键:

import paho.mqtt.client as mqtt
def on_message(client,userdata,msg):
    print 'Received: ' + msg.payload

client = mqtt.Client()
client.on_message = on_message

client.connect('localhost',1883)
client.subscribe('hello/#')

client.loop_forever()

出版商:

import paho.mqtt.client as mqtt

client = mqtt.Client()

client.will_set('hello/will','Last will',False)
client.connect('localhost',1883)

client.publish('hello/world','Regular msg',False)
client.disconnect()

输出

Received: Last will

我应该只收到常规消息,因为我使用client.disconnect()来关闭连接.如果我评论will_set行,我会收到常规消息.我也尝试在同一主题上发布它们并且它不起作用.

解决方法

您可以尝试使用单一方法只发布一条消息,如下所示:

import paho.mqtt.publish as publish

publish.single('hello/world',False,'localhost',1883,'publisher',10,{'topic': 'hello/will','payload': 'Will msg','qos': 0,'retain': False})

https://pypi.python.org/pypi/paho-mqtt#single

我猜想问题是你在发布实际完成之前断开连接,这可能就是你看到遗嘱信息的原因.

编辑 –
当我使用mosquitto_sub -v -t’hello /#’运行你的代码时,我看到了正常的消息和正在传递的意愿.

EDIT2 –

这对我来说很好:

import paho.mqtt.client as mqtt

client = mqtt.Client()

client.will_set('hello/will',False)
client.loop();
client.disconnect()
client.loop();

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...