Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中websocket上的MQTT_Python_Websocket_Mqtt_Iot_Paho - Fatal编程技术网

python中websocket上的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

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_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.python
examples/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”的配置文件存储在哪里吗?我也想试试你的建议。谢谢你,伙计……)@斯密格