概述
1、背景
目前MQTT的标准组织官网:http://www.mqtt.org,里面列出了不少支持的软件相关资源。python
一个轻量级的MQTT服务器是:http://www.mosquitto.org,能够运行ARM/MIPS的嵌入式linux系统上。linux
物联网常使用 “消息队列遥测传输(Message Queuing Telemetry Transport, MQTT)” 协议订阅数据,这里用Python实现从MQTT服务器订阅数据。git
首先和TCP协议比较
首先TCP是传输层协议,实现了一个双向的通讯链路。web
MQTT是基于TCP的应用层协议。(固然中间可能多一层,websocket)缓存
二者不在一个层级,比较谁比谁好是没有意义的。bash
咱们用raw TCP 也能够实现数据通讯,好比发送传感器数据到服务器。为何要用到MQTT呢 ?服务器
假设如今有一个物联网的应用,题主固然能够直接用TCP socket 作通讯,实际上很多人也是这么作的。而后你就会发现:websocket
须要本身写确认重传的机制,由于TCP 链接说不定就断了。eclipse
若是有不少个传感器(生产者),又要写代码管理这么多TCP链接呢。socket
若是同时又有多个地方须要用到这些数据,还得写一个转发的逻辑。
若是系统很复杂,参与人或公司不少,那通讯格式要怎么定,怎么改,沟通成本就很大了。
这些东西这么麻烦,又不想加班写代码,那有没有办法简便地解决呢?固然有,就是用现成的协议啦,好比MQTT。
MQTT 提供两个核心功能:
三个级别的QOS
基于订阅/发布的消息转发服务。
用了MQTT, 上面提到的这些问题就都被优雅地解决掉啦。
其实,同类应用的不少问题,都是有必定共性的。这时候就会有一些人提出通常性的解决方式,这样你们就不用重复造轮子,同时又保证了互操做性。这就是协议存在的意义啦。
因此一句话总结,MQTT 和其余的应用层协议,好比 HTPP, FTP, BitTorrent 协议同样,都是为了解决特定问题而生的一套方案,能够帮咱们省好多事。
2、安装部署
环境:Python 2.7.5
mosquitto version 1.5.8
mosquitto is an MQTT v3.1.1 broker.
安装安装mosquitto,这里比较省事了
yum -y install mosquitto mosquitto-clients python-mosquitto
安装paho-mqtt,pypi上有这个库,能够自行安装
3、测试
启动命令: mosquitto
server:mosquitto_pub -t test -h 127.0.0.1 -m '{"pin":1,"value":0}'
client:mosquitto_sub -v -t test -h 127.0.0.1 (先启动)
测试结果
[root@test ~]# mosquitto_sub -v -t test -h 127.0.0.1
test {"pin":1,"value":0}
使用脚本测试
client.py
#!/usr/bin/python
import sys
import datetime
import socket, sys
#======================================================
try:
import paho.mqtt.client as mqtt
except ImportError:
print("MQTT client not find. Please install as follow:")
print("git clone http://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.python.git")
print("cd org.eclipse.paho.mqtt.python")
print("sudo python setup.py install")
# 服务器地址
strBroker = "localhost"
# 通讯端口
port = 1883
# 用户名
username = 'username'
# 密码
password = 'password'
# 订阅主题名
topic = 'topic'
#======================================================
def on_connect(mqttc, obj, rc):
print("OnConnetc, rc: "+str(rc))
def on_publish(mqttc, obj, mid):
print("OnPublish, 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("Log:"+string)
def on_message(mqttc, obj, msg):
curtime = datetime.datetime.now()
strcurtime = curtime.strftime("%Y-%m-%d %H:%M:%S")
print(strcurtime + ": " + msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
on_exec(str(msg.payload))
def on_exec(strcmd):
print "Exec:",strcmd
#=====================================================
if __name__ == '__main__':
mqttc = mqtt.Client("test")
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_subscribe = on_subscribe
mqttc.on_log = on_log
# 设置帐号密码(若是须要的话)
#mqttc.username_pw_set(username, password=password)
mqttc.connect(strBroker, port, 60)
mqttc.subscribe(topic, 0)
mqttc.loop_forever()
server.py
#!/usr/bin/python
import sys
import datetime
import socket, sys
import paho.mqtt.publish as publish
def transmitMQTT(strMsg):
strMqttBroker = "localhost"
strMqttChannel = "test"
print(strMsg)
publish.single(strMqttChannel, strMsg, hostname = strMqttBroker)
if __name__ == '__main__':
transmitMQTT("Hello,MQTT")
print "Send msg ok."
4、开发中须要注意的一些问题
MQTT链接心跳时间
MQTT单个发布消息最大长度
离线消息最长缓存时间
单MQTT链接的最大订阅数
最后
以上就是坚定泥猴桃为你收集整理的python读取mqtt数据_Python实现MQTT接收订阅数据的全部内容,希望文章能够帮你解决python读取mqtt数据_Python实现MQTT接收订阅数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复