数据库 - Model 前置说明
官方开源项目 抓取代理IP

介绍

MQTT服务端的配置项统一存放在/config/mqtt.php文件中。

具体内容如下:

return [
    // +-----------------------------
    // | 服务端
    // +-----------------------------
    // 是否启用密码器,启用时配置文件中得账号密码无效,改为下方密码器输出 
    'auth_status' => false,
    // 密码器地址
    'cipher' => '\box\config\MqttCipher',
    // 账号
    'user_name' => 'swoolex',
    // 密码
    'password' => 'swoolex',
    // 版本
    'protocol_level' => 3, // 支持传入3 | 5
    // 设备最大同时在线数
    'device_max_num' => 100000,
    // 判断设备心跳过期时间(S)
    'ping_max_time' => 120,
    // 设备在线状态定时检测间隔时间(S)
    'ping_crontab_time' => 20,
    // 客户端消息发布事件,是否允许使用 # + 通配符
    'publish_wildcard_status' => true,
];

其中publish_wildcard_status参数需要注意,当设置为false时,发布消息中的topic订阅主题内容不允许带有#+通配符,否则服务端将直接中断连接。

注意:密码器的设置,从v2.5.1版本起才支持。

警告:v2.5.6版本起,protocol_level参数已被移除。

关于连接鉴权

v2.5.1版本起,支持开发者自定义MQTT连接鉴权服务,只需要在配置文件中,将auth_status参数改为true即可。
对应的鉴权逻辑在\box\config\MqttCipher类中进行修改。

该类默认代码如下:

namespace box\config;
use design\AbstractMqttCipher;

class MqttCipher extends AbstractMqttCipher {
    /**
     * 必须实现的密码器入口方法
     * @todo 无
     * @author 小黄牛
     * @version v2.5.1 + 2021.08.20
     * @deprecated 暂不启用
     * @global 无
     * @param array $data 连接请求参数
     * @return bool true.鉴权通过  false.鉴权失败
    */
    public function run($data) {
        /**
         * $data["client_id"] 设备ID
         * $data["user_name"] 连接账号
         * $data["password"]连接密码
        */

        // 下方IF为系统密码器逻辑,你可以改成读取DB或Redis存储器做校验
        if ($data['user_name'] != \x\Config::get('mqtt.user_name') || $data['password'] != \x\Config::get('mqtt.password')) {
            return false;
        }

        return true;
    }
}

SW-X

企业级 - 高性能 PHP 框架

最后更新:3年前 . 作者-小黄牛

本篇目录