MQTT是一个轻量级的消息协议。从2014年12月IOIT大会上得到的消息,该协议已经被OASIS标准组织接收,成立了专门的工作组,以意味着该规范正式走向了标准化之路。
目前MQTT的标准组织官网:http://www.mqtt.org,里面列出了很多支持的软件相关资源。
一个轻量级的MQTT服务器是:http://www.mosquitto.org,可以运行ARM/MIPS的嵌入式linux系统上,如OpenWRT。
很多客户端模块现在被Eclipse基金会接管,发展很快。所有的语言支持客户端在这里:http://git.eclipse.org/c/paho/
下面介绍基于python的MQTT的客户端的安装:
git clone http://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.python.git
cd org.eclipse.paho.mqtt.python
sudo python setup.py install
注意,如果使用Sublime,最好到里面的控制台进行安装,缺省运行在独立的环境中,跟系统的控制台安装的程序不一样。
然后,发送消息:
#!/usr/bin/python
# This shows a service of an MQTT subscriber.
# Copyright (c) 2010-2015, By openthings@163.com.
import sys
import datetime
import socket, sys
import paho.mqtt.publish as publish
def transmitMQTT(strMsg):
#strMqttBroker = "localhost"
strBroker = "112.124.67.178"
strMqttChannel = "/inode/mychannel"
print(strMsg)
publish.single(strMqttChannel, strMsg, hostname = strMqttBroker)
if __name__ == '__main__':
transmitMQTT("Hello,MQTT Proxy, I am client inside python.")
print "Send msg ok."
创建一个MQTT服务器程序:
#!/usr/bin/python
# This shows a service of an MQTT subscriber.
# Copyright (c) 2010-2015, By openthings@163.com.
import sys
import datetime
import socket, sys
#======================================================
#MQTT Initialize.--------------------------------------
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")
#======================================================
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
strExec = strcmd
#=====================================================
if __name__ == '__main__':
mqttc = mqtt.Client("mynodeserver")
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
#strBroker = "localhost"
strBroker = "112.124.67.178"
mqttc.connect(strBroker, 1883, 60)
mqttc.subscribe("/inode/mychannel", 0)
mqttc.loop_forever()