首先简单的介绍一下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 Mosquitto\Client();
$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编码就算是完成了,效果如下