Между февралем и сейчас исправлена кодовая база paho.mqtt.python. Просто добавьте transport='websockets'
, как предложил Fl0v0, он просто работает. Ниже приведен полный код, который подписывается на все или все под $SYS/
. Код испытания на главной ветви Зафиксировать хэш e56f913
на 3 июня 2016 года
#!/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()
Update: Код выше не работает на Windows 7 с питоном 2.7.6, что я тестировал с путем вызова от одного версия Cygwin (но не cygwin python).Ни одна из тем "#"
или "$SYS/#"
не опубликовала ни одного опубликованного сообщения.
Вместо этого в качестве примера следует использовать паб или субтитра. Патч paho.mqtt.python examples/pub-single.py
и examples/sub-simple.py
. Затем запустите sub-simple.py
в одном терминале. Запустите pub-single.py
в другом терминале, дважды. Абонентский терминал распечатает два сообщения, опубликованные издателем.
Патч к examples/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')
Патч к examples/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. – barny
Я пробовал, и он работал на 8080, но я хочу делать с 8080, поскольку брокер mosquitto имеет поддержку websocket на 8080, но эта библиотека не работает на 8080. –
Какая выгода, по вашему мнению, заключается в запуске собственного клиента через веб-узлы? – hardillb