MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通信協議,有可能成爲物聯網的重要組成部分。該協議支持全部平臺,幾乎能夠把全部聯網物品和外部鏈接起來,被用來當作傳感器和制動器(好比經過Twitter讓房屋聯網)的通訊協議。html
EMQ是國人開源的高性能MQTT服務端,支持百萬級鏈接python
Emq官網提供了Linux,Windows,Mac的原生安裝包,這裏咱們經過Docker搭建web
鏡像獲取方式:docker
這裏選擇阿里雲鏡像
能夠直接經過docker命令拉取鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6
瀏覽器
docker run --name emq -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 -d registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6
鏡像配置說明:
- 防火牆開啓1883(MQTT)
- 8083(WebSocket)
- 18083(Dashboard控制檯)端口
- Dashboard 控制檯,默認管理員: admin, 密碼: public
- 在瀏覽器中輸入 http:192.168.99.100:18083進入Web控制檯,用戶名:admin 密碼:publicoop
映像默認容許1萬線 MQTT 鏈接,最大可配置到10萬線。映像內存佔用: 5萬鏈接/1G內存(from官方文檔)性能
由於mqtt自己是發佈訂閱模型,
複製代碼
這裏咱們使用python做爲服務端發佈(主要是簡單😊),須要引入paho包測試
import paho.mqtt.client as mqtt
HOST = "127.0.0.1"�
PORT = 1883
def pub():
client = mqtt.Client()
client.connect(HOST, PORT, 60)
client.publish("chat", "hello", 2) # 發佈一個主題爲'chat',內容爲‘hello liefyuan’的信息
client.loop_forever()
if __name__ == '__main__':
pub()
複製代碼
依舊先上python代碼ui
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("chat")
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
if __name__ == '__main__':
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("127.0.0.1", 1883, 60)
client.loop_forever()
複製代碼
查看web端的Dashboard 阿里雲
MQTT做爲物聯網開源協議,同時支持高質量的Qos,能夠用在大部分物聯網通訊場景,進行APP定位,消息推送等功能,下面的文章我會接入kafka來進行物聯網消息推送,並經過kafka進行聚合、採集消息。