我希望一个RaspberryPi-A向RaspberryPi-B发送按摩,而RaspberryPI-B应该自动将按摩发送回去。我知道这是一个初学者的问题,但是我是一个,而且我整天都在努力寻找答案。
这是我客户的代码
import paho.mqtt.client as mqtt
MQTT_SERVER = "localhost"
MQTT_PATH = "test_channel"
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(MQTT_PATH)
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
# more callbacks, etc
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(MQTT_SERVER, 1883, 60)
client.loop_forever()
这是我发布者的代码
import paho.mqtt.publish as publish
MQTT_SERVER = "192.168.1.5"
MQTT_PATH = "test_channel"
publish.single(MQTT_PATH, "Hello World!", hostname=MQTT_SERVER)
我应该如何以不同的方式编写代码,以便客户返回例如“ Hello back”的消息?
答案 0 :(得分:1)
有两种消息传递模型:
点对点(一对一)-消息通过队列从一个应用程序发送到另一个应用程序。可以有超过1个正在使用的(接收方)应用程序,但只有其中一个会接收到消息。
发布/订阅-将消息发布到某个主题,多个使用者(订户)将每个接收消息的副本。可以有1个或多个应用程序将消息发布到同一主题,并且有1个或多个应用程序使用(接收)消息。
MQTT建立在发布/订阅消息传递模型上。
您的描述听起来像您想要点对点消息传递。是的,您可以将MQTT弯曲为点对点的行为,但是请注意,如果您有多个将消息发布到同一主题的应用程序,您可能会感到困惑。
MQTT_PATH = "test_channel"
publish.single(MQTT_PATH, "Hello World!", hostname=MQTT_SERVER)
MQTT中没有“通道”之类的东西。您的代码正在将消息发布到名为test_channel的主题。
最好在主题名称中使用一些层次结构。
即
请记住,任何数量的应用程序都可以将消息发布到给定的主题,并且任何数量的应用程序都可以订阅给定的主题并接收消息的副本。