繁体   English   中英

我无法连接到 mqtt 中的代理,我想知道为什么?

[英]I cannot connect to a broker in mqtt and I would like to know why?

一共有三个文件:broker.py; 子.py; 酒吧.py;

经纪人.py:

import logging
import asyncio
from hbmqtt.broker import Broker

logger = logging.getLogger(__name__)

config = {
    'listeners': {
        'default':{
            'type': 'tcp',
            'bind': 'localhost:9999' 
        }
    },
    'sys_interval': 10,
    'topic-check':{
        'enabled': False
    }
}

broker = Broker(config)

@asyncio.coroutine
def startBroker():
yield from broker.start()

if __name__ == '__main__':
formatter = "[%(asctime)s] :: %(levelname)s :: %(name)s :: %(message)s"
logging.basicConfig(level=logging.INFO, format=formatter)
asyncio.get_event_loop().run_until_complete(startBroker())
asyncio.get_event_loop().run_forever()

子.py:

import paho.mqtt.client as mqtt

client = mqtt.Client()
client.connect('localhost', 9999)

def on_connect(client, userdata, flags, rc):
    print("Connected to a broker!")
    client.subscribe("LINTANGtopic/test")

def on_message(client, userdata, message):
    print(message.payload.decode())

while True:
    client.on_connect = on_connect
    client.on_message = on_message
    client.loop_forever

发布.py:

import paho.mqtt.client as mqtt

client = mqtt.Client()
client.connect('localhost', 9999)

while True:
    client.publish("LINTANGtopic/test", input('Message: '))

所以我首先打开了三个终端:在第一个终端,我输入了“py broker.py”,运行良好; 在第二个终端中,我输入了“py sub.py”,但它不起作用并且在第二个终端中没有显示任何内容,它应该显示“已连接到代理”,尽管它使第一个终端显示:

[2020-07-29 14:01:41,925] :: INFO :: hbmqtt.broker :: Listener 'default': 1 connections acquired        
[2020-07-29 14:01:41,926] :: INFO :: hbmqtt.broker :: Connection from ::1:50450 on listener 'default'   
[2020-07-29 14:01:41,937] :: INFO :: transitions.core :: Exited state new
[2020-07-29 14:01:41,937] :: INFO :: transitions.core :: Entered state connected

在第三个终端输入“py pub.py”,显示如下:

D:\MQTT>py pub.py
Message: 

我需要让订阅者连接到代理,我想知道为什么会这样?

sub.py 将无法正常工作。

首先client.loop_forever是一个 function 所以需要用()调用。

其次, while True:循环是多余的,您不应该重复设置回调。

尝试以下操作:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected to a broker!")
    client.subscribe("LINTANGtopic/test")

def on_message(client, userdata, message):
    print(message.payload.decode())

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('localhost', 9999)
client.loop_forever()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM