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的客户端的安装:
注意,如果使用Sublime,最好到里面的控制台进行安装,缺省运行在独立的环境中,跟系统的控制台安装的程序不一样。
然后,发送消息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/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服务器程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#!/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() |
相关博文
MQTT消息协议、服务器及其客户端