python中websocket上的MQTT
python是否支持在端口为8080的mqtt代理上订阅python中websocket上的MQTT,python,websocket,mqtt,iot,paho,Python,Websocket,Mqtt,Iot,Paho,python是否支持在端口为8080的mqtt代理上订阅 import sys import paho.mqtt.client as mqtt def on_connect(mqttc, obj, flags, rc): print("rc: "+str(rc)) def on_message(mqttc, obj, msg): print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload)) def on_publ
import sys
import paho.mqtt.client as mqtt
def on_connect(mqttc, obj, flags, rc):
print("rc: "+str(rc))
def on_message(mqttc, obj, msg):
print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
def on_publish(mqttc, obj, mid):
print("mid: "+str(mid))
def on_subscribe(mqttc, obj, mid, granted_qos):
print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_log(mqttc, obj, level, string):
print(string)
mqttc = mqtt.Client()
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_subscribe = on_subscribe
mqttc.connect("test.mosquitto.org", 8080, 60)
mqttc.subscribe("test/iot", 0)
mqttc.loop_forever()
我无法使用此代码连接。Mosquitto在端口8080有websocket支持,但这个paho库不适用于它。有python的解决方案吗?
我正在windows 10上使用python 2.7。不,Paho库的python版本不支持WebSocket上的MQTT
事实上,我相信在websocket上支持MQTT的唯一本地客户端(不在浏览器中)MQTT库是NodeJS模块()Paho MQTT模块几天前引入了websocket支持。我认为它还没有发布,但是您可以使用
pip install git+git://github.com/eclipse/paho.mqtt.python.git
也可以在windows下工作。(感谢您提供评论中的信息)
您可以通过连接将WebSocket用作传输
mqttc = mqtt.Client(transport="websockets")
更新:
如果您试图在python客户端上使用websocket协议,因为您还需要连接浏览器客户端(例如MQTT.js),那么您还可以配置MOSQUITO来侦听websocket和正常的MQTT协议
只需创建一个配置文件,例如
/etc/mosquitto/mosquitto.conf
包括以下内容:
listener 1883
protocol mqtt
listener 9001
protocol websockets
然后你就可以和我一起跑mosquitto了
mosquitto -c /etc/mosquitto/mosquitto.conf
您应该会看到类似的输出:
1469015320: mosquitto version 1.4.8 (build date 2016-05-3112:07:40+0200) starting
1469015320: Config loaded from /etc/mosquitto/mosquitto1.conf.
1469015320: Opening ipv4 listen socket on port 1883.
1469015320: Opening ipv6 listen socket on port 1883.
1469015320: Opening websockets listen socket on port 9001.
然后,python客户端连接到端口1883,浏览器客户端连接到端口9001
您可以使用测试websocket侦听器。从2月到现在,paho.mqtt.python代码库已经修复,只需将它指向
ws://localhost:9001
。只需按照Fl0v0的建议添加transport='websockets'
,它就可以正常工作。下面是订阅所有内容或$SYS/
下所有内容的完整代码。测试的代码于2016年6月3日在主分支上使用提交哈希e56f913
#!/usr/bin/python
import sys
import paho.mqtt.client as mqtt
def on_connect(mqttc, obj, flags, rc):
print("rc: "+str(rc))
def on_message(mqttc, obj, msg):
print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
def on_publish(mqttc, obj, mid):
print("mid: "+str(mid))
def on_subscribe(mqttc, obj, mid, granted_qos):
print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_log(mqttc, obj, level, string):
print(string)
mqttc = mqtt.Client(transport='websockets')
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_subscribe = on_subscribe
mqttc.connect("test.mosquitto.org", 8080, 60)
mqttc.subscribe("#", 0)
#mqttc.subscribe("$SYS/#", 0)
mqttc.loop_forever()
更新:通过调用一个版本的Cygwin(而不是Cygwin-python),上面的代码在我测试的带有python2.7.6的windows7上不起作用。主题“#”
或“$SYS/#”
都不会返回任何已发布的消息
相反,发布或订阅实体主题的工作方式如下所示。补丁paho.mqtt.pythonexamples/pub single.py
和examples/sub simple.py
。然后在一个终端中运行sub simple.py
。在另一个终端中运行pub single.py
,两次。用户终端将打印出发布者发布的两条消息
补丁到示例/pub single.py
:
-publish.single("paho/test/single", "boo", hostname="test.mosquitto.org")
+publish.single("/HelloWorld", "boo", hostname="test.mosquitto.org",
+ port=8080, transport='websockets')
补丁到示例/sub-simple.py
:
-topics = ['#']
+topics = ['/HelloWorld']
-m = subscribe.simple(topics, hostname="iot.eclipse.org", retained=False, msg_count=2)
+m = subscribe.simple(topics, hostname="test.mosquitto.org",
+ retained=False, msg_count=2,
+ port=8080, transport='websockets')
我认为websocket是它自己的协议,与MQ不同,这是(或使用)一个不同的协议,就像尝试比较苹果和西红柿一样,除了它们都是圆的(即,都是基于IP的协议)之外,它不起作用。尝试端口1883,它是未加密的MQTT。我尝试过,它在8080上工作,但我想用8080,因为mosquitto broker支持8080上的websocket,但这个库不适用于8080。你认为在websocket上运行本机客户端有什么好处?亲爱的hardlib,我在android和iOS上制作了一个IOT应用程序,可以发送MQTT消息仅在websocket端口8080上,因此我需要连接端口8080上的客户端设备。。。。javascript支持websocket库上的mqtt,但python dsnt支持它……您有一个客户端应用程序,它只能在8080上通过websocket谈论mqtt。那么这是否意味着你的问题应该是‘有没有一个python库可以通过websocket(8080上)提供MQTT服务器?’我已经在Nodejs上使用了名为“mows”的库,它是websocket上的MQTT,但我想用python实现它,所以你有没有想过要在python上实现它?你有没有尝试过使用python MQTT websocket?是的,巴尼,我已经做了,但我在谷歌找不到任何有用的东西。。。如果你有解决办法,那就告诉我me@SmitGardhariya我在一个工作项目中使用了
hbmqtt
python库。它得到了极大的支持和积极的贡献。但我发现了一些局限性:1。Hbmqtt将不支持代理,因为它使用websockets 7
库来进行未完全支持代理的后台sock连接。2.发送的消息未使用asyncio.StreamReader或Writer,当您在慢速网络上运行时,这会使库自动崩溃[您可以通过以比带宽更小的比特块发送数据包来实现]。@SmitGardhariya HBMQTT确实支持ws、wss、mqtt、mqtts、wss以及用户名和密码身份验证。最重要的是最后的遗嘱。QOS_1和QOS_2 ACK有时处理起来有点棘手;如果处理的是连续的消息流,那么paho代码将自行实现websocket协议。您甚至不需要安装websocket软件包。6月3日的提交是在标记v1.2之后。这暗示该功能是由v1.2添加或修复的。上一版本于2016年1月29日发布。Thnx minghua。。。。我试过了,但还是没有收到我的信息。。。。。这段代码允许我连接到websocket,但我没有收到消息。我想知道您运行的环境。西格温?只要再试一次,它对我有效。将文件放入paho签出下的paho.mqtt.python/src
,并从该目录中运行。我猜在某些平台上订阅#可能会有问题。thnx明华it也在windows上工作。。。。jst需要添加transport=websocket仍然无法获取我的消息。。。。。这段代码允许我连接到websocket,但我没有收到任何消息。@SmitGardhariya在阅读了关于您的问题的评论后,我觉得您想要使用websocket,因为另一个客户端需要使用websocket连接到Mosquetto。我发现,mosquitto可以监听WebSocket和正常的mqtt连接。您可以在配置文件中添加一个额外的侦听器:listener 9001 protocol websockets
@FI0v0我得到了上述建议的解决方案。但是你能告诉我python库名为“paho”的配置文件存储在哪里吗?我也想试试你的建议。谢谢你,伙计……)@斯密格