一、ubuntu安装emqx

curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
sudo apt-get install emqx
sudo systemctl start emqx

二、端口

端口号    介绍
1883    MQTT 协议端口
8883    MQTT/SSL 端口
8083    MQTT/WebSocket 端口
8080    HTTP API 端口
18083    Dashboard 管理控制台端口,可以访问http://192.168.110.xxx:18083,默认密码为admin/public

重置密码:emqx ctl admins passwd admin public123

三、php使用mqtt

1. 安装composer

composer require bluerhinos/phpmqtt -vvv

2. 发布消息

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Bluerhinos\phpMQTT;
use Illuminate\Routing\Controller as BaseController;

class TestController extends BaseController
{
    public function sendMqtt(Request $request){

        //发布主题
        $subject=$request->input('subject');

        //发布内容,字符串,如果是对象要转成json
        $content=$request->input('content');

        //客户端id,自己生成唯一的
        $client_id='mqtt_'.$this->getRandStr(10);

        $mqtt = new phpMQTT(env('MQTT_SERVER_IP'), env('MQTT_SERVER_PORT'), $client_id);       

        //连接后发布消息
        if ($mqtt->connect(true, NULL, env('MQTT_SERVER_USER_NAME'), env('MQTT_SERVER_PASSWORD'))) {
            $mqtt->publish($subject, $content, 0, false);
            $mqtt->close();
        } else {
            echo "Time out!\n";
        }
    }

    /**
     * @param $length
     * @return string
     * 获取随机字符串
     */
    public function getRandStr($length){
        //字符组合
        $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        $len = strlen($str)-1;
        $randstr = '';
        for ($i=0;$i<$length;$i++) {
            $num=mt_rand(0,$len);
            $randstr .= $str[$num];
        }
        return $randstr;
    }
}

3. 订阅消息

需要长连接,所以使用console模式运行php

public function handle()
{
    $server = env('MQTT_SERVER_IP');
    $port = env('MQTT_SERVER_PORT');
    $username = env('MQTT_SERVER_USER_NAME');
    $password = env('MQTT_SERVER_PASSWORD');
    $client_id = 'mqttjs_asdfadsfaqerqw';

    //订阅主题,跟发布的主题要保持一致。
    //消费端主题支持通配符,例如subject/#,可以收到subject/123 subject/124
    $subject = 'bimcc/#';
    $mqtt = new phpMQTT($server, $port, $client_id);
    if (!$mqtt->connect(true, NULL, $username, $password)) {
        exit(1);
    }

    $mqtt->debug = true;

    $topics[$subject] = array('qos' => 0, 'function' => function($topic, $msg){
        echo 'Msg Recieved: ' . date('r') . "\n";
        echo "Topic: {$topic}\n\n";
        echo "\t $msg \n\n"; //此处是mqtt收到的消息
    });

    //监听链接,并回调处理
    $mqtt->subscribe($topics, 0);
    while ($mqtt->proc()) {}
    $mqtt->close();
}
作者:admin  创建时间:2026-06-04 07:12
最后编辑:admin  更新时间:2026-06-04 07:12
上一篇:
下一篇: