php安装mqtt mosquitto及发送消费消息代码示例

php安装mqtt  mosquitto及发送消费消息代码示例

php安装mqtt  mosquitto及发送消费消息代码示例

一、什么是mqtt?

MQTT(message queuing telemetry transport)是IBM开发的即时通讯协议,是一种发布/订阅极其轻量级的消息传输协议,专门为网络受限设备、低宽带以及高延迟和不可靠的网络而设计的。由于以上轻量级的特点,是实现智能家居的首选传输协议,相比于XMPP,更加轻量级而且占用宽带低。

特点

a.由于采用发布/订阅的消息模式,可以提供一对多的消息发布

b.轻量级,网络开销小

c.对负载内容会有屏蔽的消息传输

d.有三种消息发布质量(Qos):

qos=0:“至多一次”,这一级别会发生消息丢失或重复,消息发布依赖于TCP/IP网络

qos=1:“至少一次”,确保消息到达,但消息重复可能会发生

qos=2:“只有一次”,确保消息到达一次

e.通知机制,异常中断时会通知双方

原理
php安装mqtt  mosquitto及发送消费消息代码示例

MQTT协议有三种身份:发布者、代理、订阅者,发布者和订阅者都为客户端,代理为服务器,同时消息的发布者也可以是订阅者(为了节约内存和流量发布者和订阅者一般都会定义在一起)。

MQTT传输的消息分为主题(Topic,可理解为消息的类型,订阅者订阅后,就会收到该主题的消息内容(payload))和负载(payload,可以理解为消息的内容)两部分。

二、mqtt服务安装

mosquitto是一个开源broker,并且支持MQTTv3.1,支持客户端的验证。mosquitto包括服务端和客户端,官网:https://mosquitto.org/download/

今天我们讲讲在centos中如何搭建mqtt服务,在centos中执行:

yum install mosquitto

安装完后启动mqtt服务

 mosquitto -c /etc/mosquitto/mosquitto.conf -d

设置开机自启动

 chkconfig mosquitto on

可以通过service mosquitto start|restart|stop对mosquitto进行管理

三、php客户端

下载地址phpMQTT-master.zip

1、发送消息

<?php


require("/data/wwwroot/default/lib/php/phpMQTT/phpMQTT.php");

$server = '127.0.0.1'; // 服务器IP
$port = 1883; // 服务器端口
$username = ''; // 用户名
$password = ''; // 密码
$client_id = 'pub_' . uniqid();

$mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);

if ($mqtt->connect(true, NULL, $username, $password)) {
    for ($i = 0; $i < 100; $i++) {
        $topic = 'topic01';
        $msg = 'Hello World! at (' . $i . ') ' . date('Y-m-d H:i:s');
        echo date('Y-m-d H:i:s') . ' SEND [' . $topic . '] ' . $msg . PHP_EOL;

        // qos = 0:仅发一次,不管是否能收到
        // qos = 1:没返回一直发,可能有重复接收
        // qos = 2:保证必须收到,并且不重复
        $mqtt->publish($topic, $msg, 0);
        usleep(100000);
    }

    $mqtt->close();
} else
{
    echo "Time out!\n";
}

订阅消费消息

<?php


require("/data/wwwroot/default/lib/php/phpMQTT/phpMQTT.php");


$server    = '127.0.0.1';     // 服务器IP
$port      = 1883;            // 服务器端口
$username  = '';              // 用户名
$password  = '';              // 密码
$client_id = 'sub_' . uniqid();

$mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);

$mqtt->debug = true;

if(!$mqtt->connect(true, NULL, $username, $password))
{
    echo "连接失败!\n";
    exit(1);
}

// 订阅列表
$topics = [
    'topic01' => ['qos' => 0, 'function' => 'procmsg'],
];

$mqtt->subscribe($topics, 0);

while ($mqtt->proc()){}

$mqtt->close();

// 消息处理函数
function procmsg($topic, $msg)
{
    echo date('Y-m-d H:i:s') . ' [' . $topic . '] ' . $msg . PHP_EOL;
}



{{collectdata}}

网友评论0