最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 使用 simps/mqtt 调用阿里云的微消息队列 MQTT 版

    正文概述 转载于:掘金(沈唁)   2021-04-28   602

    微消息队列 MQTT 版 是专为移动互联网(MI)、物联网(IoT)领域设计的消息产品,覆盖互动直播、金融支付、智能餐饮、即时聊天、移动 Apps、智能设备、车联网等多种应用场景;通过对 MQTT、WebSocket 等协议的全面支持,连接端和云之间的双向通信,实现 C2C、C2B、B2C 等业务场景之间的消息通信,可支撑千万级设备与消息并发。

    在阿里云的文档中 php 推荐的 SDK 是 Mosquitto-PHP ,这是一个基于回调和异步操作的 PHP MQTT 扩展,同时还依赖 libmosquitto

    而 simps/mqtt 是纯 PHP 代码实现的协议解析,客户端实现基于 Swoole 的同步阻塞客户端和协程客户端,可以用于 PHP-FPM 和 CLI 两种模式。

    并且 simps/mqtt 支持 MQTT 5.0 协议,是 PHP 首个支持 MQTT 5.0 协议的类库,后期如果阿里云的微消息队列 MQTT 版支持了 MQTT 5.0 协议,可以无缝升级。

    以下为使用 simps/mqtt 来实现之前所提供的 Mosquitto-PHP 的示例代码

    git clone https://github.com/simps-cloud/aliyun-mqtt.git
    cd aliyun-mqtt
    composer install
    
    • 配置文件

    config.php

    return [
        'access_key' => '', // 阿里云帐号 AccessKey
        'secret_key' => '', // 阿里云帐号 SecretKey
        'end_point' => '', // 接入点地址,购买实例后从控制台获取
        'instance_id' => '', // 实例 ID,购买后从控制台获取
        'topic' => '', // MQTT Topic,其中第一级 Topic 需要在 MQTT 控制台提前申请
        'group_id' => '', //  MQTT 客户端ID 前缀, GroupID,需要在 MQTT 控制台申请
    ];
    
    • 单独使用 MQTT 消息收发示例

    sendMessageToMQTT.php

    include __DIR__ . '/vendor/autoload.php';
    
    use Simps\MQTT\Client;
    use Simps\MQTT\Config\ClientConfig;
    use function Swoole\Coroutine\run;
    
    run(function () {
        $config = require_once __DIR__ . '/config.php';
    
        // MQTT 客户端ID 后缀,DeviceId,业务方自由指定,需要保证全局唯一,禁止 2 个客户端连接使用同一个 ID
        $deviceId = Client::genClientID();
        $qos = 0;
        $port = 1883;
        $keepalive = 90;
        $cleanSession = true;
        $clientId = $config['group_id'] . '@@@' . $deviceId;
        echo "ClientId: {$clientId}", PHP_EOL;
    
        // 设置鉴权参数,参考 MQTT 客户端鉴权代码计算 username 和 password
        $username = 'Signature|' . $config['access_key'] . '|' . $config['instance_id'];
        $sigStr = hash_hmac("sha1", $clientId, $config['secret_key'], true);
        $password = base64_encode($sigStr);
        echo "UserName: {$username} \r\nPassword: {$password}", PHP_EOL;
    
        // 初始化客户端配置
        $clientConfig = new ClientConfig();
        $clientConfig->setUserName($username)
            ->setPassword($password)
            ->setClientId($clientId)
            ->setKeepAlive($keepalive)
            ->setMaxAttempts(0)
            ->setSwooleConfig([
                'open_mqtt_protocol' => true,
                'package_max_length' => 2 * 1024 * 1024,
            ]);
    
        try {
            // 初始化客户端
            $client = new Client($config['end_point'], $port, $clientConfig);
    
            $connect = $client->connect($cleanSession);
            // 连接状态
            var_dump($connect);
    
            $topics[$config['topic']] = $qos;
            $subStatus = $client->subscribe($topics);
            // 订阅状态
            var_dump($subStatus);
    
            $publishStatus = $client->publish($config['topic'], "Hello MQTT PHP Demo", $qos);
            // 发布状态
            var_dump($publishStatus);
    
            $buffer = $client->recv();
            // 订阅消息接收
            var_dump($buffer);
    
            echo 'Finished';
        } catch (\Throwable $e) {
            echo $e->getMessage();
        }
    });
    
    • MQTT 签名示例

    connectUseSignatureMode.php

    • MQTT Token 示例

    connectUseTokenMode.php

    • MQTT 发送顺序消息 RocketMQ 订阅顺序消息示例

    sendOrderMessage.php

    • P2P 消息收发模式

    sendP2PMessageToMQTT.php


    起源地 » 使用 simps/mqtt 调用阿里云的微消息队列 MQTT 版

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元