MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。
若初次接受mqtt,可以先简单的理解下边几个概念:
【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
【MQTT协议消息】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
【MQTT协议主题】——MQTT中的主题可理解为相同类型或相似类型的消息集合。
1.安装
2.新服务器安装
emq提供不同版本安装
unzip emqttd-macosx-v2.0.zip && cd emqttd
# 启动emqttd
./bin/emqttd start
# 检查运行状态
./bin/emqttd_ctl status
# 停止emqttd
./bin/emqttd stop
3.简单测试
chrome 服务器提供简单的mqtt服务测试
ok ,然后点击右下方 SAVE CHANGES 然后就可以进行简单的测试了
一般是硬件登录后服务器端返回订阅地址,然后由硬件订阅,然后服务器发布消息,则硬件即可收到信息。
假设后台为php语言
点此下载php mqtt
假设推送订单数据
/**
* mqqt 发布消息
* @param int $order_id 订单id
*/
function mqqt_publish($order_id){
$base_path = $base_path == null ? BASE_ROOT_PATH . '/Application/Common/Tool' : $base_path;
$file_name = $base_path . '/mqtt/phpMQTT.php'; //引入文件
require_once ($file_name);
$datas = array(); //用于组件数据
$mqtt_address = '通讯地址'; //定义通讯地址
$server = "mqtt服务器ip地址"; // change if necessary
$port = 1883; // change if necessary
$username = ""; // set your username
$password = ""; // set your password
$client_id = uniqid(); // make sure this is unique for connecting to sever - you could use uniqid()
$mqtt = new \Common\Tool\mqtt\phpMQTT($server, $port, $client_id);
if ($mqtt->connect(true, NULL, $username, $password)) {
$mqtt->publish($mqtt_address, json_encode($datas), 0);
$mqtt->close();
} else {
echo "Time out!\n";
}
}
4.总结
本文并没有分析MQTT协议的种种细节,但是希望通过一个简单的例子把MQTT协议“使用起来”,通过使用过程来理解MQTT协议。