首先簡單的介紹一下mqtt協議,MQTT是一個基於客戶端-服務器的消息發布/訂閱傳輸協議。
MQTT協議運行在TCP/IP或其他網絡協議,提供有序、無損、雙向連接。其特點包括:
1.使用的發布/訂閱消息模式,它提供了一對多消息分發,以實現與應用程序的解耦.
2.對負載內容屏蔽的消息傳輸機制。
3.對傳輸消息有三種服務質量(QoS):
最多一次
,這一級別會發生消息丟失或重複,消息發布依賴於底層TCP/IP網絡。即:<=1
至多一次
,這一級別會確保消息到達,但消息可能會重複。即:>=1
只有一次
,確保消息只有一次到達。即:=1。在一些要求比較嚴格的計費系統中,可以使用此級別
4.數據傳輸和協議交換的最小化(協議頭部只有2字節),以減少網絡流量通知機制,異常中斷時通知傳輸雙方
MQTT
協議中有三種身份:
發布者(Publish)
、
代理(Broker)
(服務器)、
訂閱者(Subscribe)
。其中,消息的
發布者
和
訂閱者
都是客戶端,消息
代理
是服務器,消息
發布者
可以同時是
訂閱者
。
OK,接下來我們看使用php代碼實現mqtt協議
<?php
class Mqtt {
public function Message() {
$client = new MosquittoClient();
$client->onConnect(function($code, $message) use ($client) {
var_dump($code);
var_dump($message);
$client->subscribe("LXBSERVER",0); //訂閱LXBSERVER主題
});
$client->onMessage(function($message) use($client,$service){
$msg = trim($message->payload);
echo bin2hex($msg)."|"; //如果和硬件通訊時,這裏的msg需要將字符轉換成16進制數據
$msg = strtoupper($msg);
$client->publish("LXBSERVER2","hello world",0); //向LXBSERVER2主題發送消息
});
$client->connect('127.0.0.1', 1883);
$client->loopForever();
}
}
$mqtt = new Mqtt();
$mqtt->Message();
這裏簡單的php編碼就算是完成了,效果如下