1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MQTT通信架构 搭建MQTT服务器

MQTT通信架构 搭建MQTT服务器

时间:2019-01-03 14:00:23

相关推荐

MQTT通信架构 搭建MQTT服务器

MQ 遥测传输 (MQTT) 是基于代理发布/订阅的消息传输协议。

传输屏蔽消息内容TCP/IP有连接传输(可靠)小型传输,开销很小,降低网络流量使用lastwill等机制告知客户端异常中断(本次实验用不到)三种消息发布服务质量至多一次:消息发布完全依赖底层TCP/IP网络,会发生消息的丢失或重复。环境传感器发送数据就是用整个,因为不久之后传感器会传来第二个数据。至少一次(可能重复,但是消息确保可以到达)只有一次:计费系统这种,消息若丢失,多次发送但是一定只会生效一次(不会发生消息重复)。

MQTT结合传感器的物联网架构图:

可以看到需要一个MQ中间件,我认为只是简单的消息订阅/发送的必要性,或许可以用我更熟悉的rocketmq或rabbitmq来代替。但是看教程全是apoll服务器,为了避免知识局限性带来的后续麻烦,我选择随大流。

安装apoll服务器:下载连接 Apollo Server Download

解压后,在bin下创建一个server,再创一个broker

创建server完成。

管理员身份CMD/POWERSHELL运行命令。

注意,JDK版本1.8。因为java9引入模块,javase中不再包含一些依赖。

要注意的点:

MQTT服务器TCP连接端口:tcp://0.0.0.0:61613 (tcp通讯,sensor(publisher)要连接的端口)

后台Web管理页面:https://127.0.0.1:61681/或http://127.0.0.1:61680/

etc/user.properties里面是用户名密码。登陆成功。

至此,mqtt服务器完成搭建。

完成client端(python)

这里是client(terminal)接受信息的。

import paho.mqtt.clientimport timemqtt = paho.mqtt.clientdef on_connect(client, userdata, flags, rc):print("Connected with result code "+str(rc)) #打印连接状态client.subscribe("temperature") #订阅temperature这个topicdef on_message(client, userdata, msg):print(msg.topic+" " + ":" + str(msg.payload)) #打印接受的消息client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))client = mqtt.Client(client_id) # ClientId不能重复,所以使用当前时间client.username_pw_set("admin", "password") # 必须设置,否则会返回「Connected with result code 4」client.on_connect = on_connectclient.on_message = on_messageclient.connect("127.0.0.1", 61613, 60) # host port keepaliveclient.loop_forever()

完成连接

完成publisher:

类似的,也是连接上之后,发布随机数生成的温度即可。

注意!!!!!!大坑:不能有同名的client_id否则没法发布消息/接受消息(只会有一个client生效)

import randomimport paho.mqtt.clientimport timemqtt = paho.mqtt.clientdef on_connect(client, userdata, flags, rc):print("Connected with result code "+str(rc)) #打印连接状态client.subscribe("temperature") #订阅temperature这个topicdef on_message(client, userdata, msg):print(msg.topic+" " + ":" + str(msg.payload)) #打印接受的消息client_id = time.strftime('%Y%m%d%H%M%S'+"sensor",time.localtime(time.time()))client = mqtt.Client(client_id) # ClientId不能重复,所以使用当前时间client.username_pw_set("admin", "admin") # 必须设置,否则会返回「Connected with result code 4」client.on_connect = on_connectclient.on_message = on_messageclient.connect("127.0.0.1", 61613, 60)while True:time.sleep(2)temptemp = random.randint(1,40)print("准备发送下2s的温度数据:",temptemp)client.publish("temperature", payload=str(temptemp), qos=2)client.loop_forever()

这样,client的terminal端可以收到:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。