加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

一文快速认识PHP项目中怎么使用MQTT

发布时间:2022-08-03 16:04:19 所属栏目:PHP教程 来源:互联网
导读:PHP 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 Web 开发。 本文主要介绍如何在 PHP 项目中使用 php-mqtt/client 客户端库 ,实现 MQTT 客户端与 MQTT 服务器的连接、订阅、取消订阅、收发消息等功能。 MQTT 客户端库选择
  PHP 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 Web 开发。
 
  本文主要介绍如何在 PHP 项目中使用 php-mqtt/client 客户端库 ,实现 MQTT 客户端与 MQTT 服务器的连接、订阅、取消订阅、收发消息等功能。
 
  MQTT 客户端库选择
  本文选择了 composer 上下载量最高的 php-mqtt/client 这个客户端库,更多 PHP-MQTT 客户端库可以在 Packagist - Search MQTT 中查看。
 
  workerman/mqtt:Asynchronous MQTT client for PHP based on workerman.
  simps/mqtt:MQTT Protocol Analysis and Coroutine Client for PHP.
  项目初始化
  确认 PHP 版本
  本项目使用 7.4.21 进行开发测试,读者可用如下命令确认 PHP 的版本。
 
 
   
 
  PHP 7.4.21 (cli) (built: Jul 12 2021 11:52:30) ( NTS )
 
  Copyright (c) The PHP Group
 
  Zend Engine v3.4.0, Copyright (c) Zend Technologies
 
      with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies
 
  使用 Composer 安装 php-mqtt/client 客户端
  Composer 是 PHP 的一个依赖管理工具,它能管理你的 PHP 项目所需要的所有依赖关系。
 
 
  composer require php-mqtt/client
 
  PHP MQTT 使用
  连接 MQTT 服务器
  本文将使用 EMQ X 提供的 免费公共 MQTT 服务器,该服务基于 EMQ X 的 MQTT 物联网云平台 创建。服务器接入信息如下:
 
  Broker: broker-cn.emqx.io
  TCP Port: 1883
  SSL/TLS Port: 8883
  导入 composer autoload 文件和 php-mqtt/client
 
 
 
  require('vendor/autoload.php');
 
   
 
  use PhpMqttClientMqttClient;
 
  设置 MQTT Broker 连接参数
  设置 MQTT Broker 连接地址,端口以及 topic,同时我们调用 PHP rand 函数随机生成 MQTT 客户端 id。
 
 
  $port     = 1883;
 
  $clientId = rand(5, 15);
 
  $username = 'emqx_user';
 
  $password = null;
 
  $clean_session = false;
 
  编写 MQTT 连接函数
  使用上述的参数进行连接,通过 ConnectionSettings 设置连接参数,比如
 
 
  $connectionSettings  = new ConnectionSettings();$connectionSettings
 
    ->setUsername($username)
 
    ->setPassword(null)
 
    ->setKeepAliveInterval(60)  // Last Will 设置
 
    ->setLastWillTopic('emqx/test/last-will')
 
    ->setLastWillMessage('client disconnect')
 
    ->setLastWillQualityOfService(1);复制代码
 
  订阅消息
  编写代码订阅 emqx/test 主题,并为该订阅配置回调函数以处理接收到的消息,此处我们将订阅得到的主题和消息打印出来:
 
 
  // 订阅
 
  $mqtt->subscribe('emqx/test', function ($topic, $message) {
 
      printf("Received message on topic [%s]: %sn", $topic, $message);
 
  }, 0);
 
  发布消息
  构造一个 payload,调用 publish 函数向 emqx/test 主题发布消息,发布完成之后客户端需要进入轮询状态,处理传入的消息和重发队列:
 
 
  for ($i = 0; $i< 10; $i++) {
 
    $payload = array(
 
      'protocol' => 'tcp',
 
      'date' => date('Y-m-d H:i:s'),
 
      'url' => 'https://github.com/emqx/MQTT-Client-Examples'
 
    );
 
    $mqtt->publish(
 
      // topic
 
      'emqx/test',
 
      // payload
 
      json_encode($payload),
 
      // retain
 
      true
 
    );
 
    printf("msg $i sendn");
 
    sleep(1);
 
  }
 
   
 
  // 客户端轮询以处理传入消息和重发队列
 
  $mqtt->loop(true);
 
  完整代码
  服务器连接、消息发布与接收代码。
 
 
  require('vendor/autoload.php');
 
 
  $server   = 'broker.emqx.io';
 
  $port     = 1883;
 
  $clientId = rand(5, 15);
 
  $username = 'emqx_user';
 
  $password = null;
 
  $clean_session = false;
 
   
 
  $connectionSettings  = new ConnectionSettings();
 
  $connectionSettings
 
    ->setUsername($username)
 
    ->setPassword(null)
 
    ->setKeepAliveInterval(60)
 
    // Last Will 设置
 
    ->setLastWillTopic('emqx/test/last-will')
 
    ->setLastWillMessage('client disconnect')
 
    ->setLastWillQualityOfService(1);
 
 
  $mqtt->connect($connectionSettings, $clean_session);
 
  printf("client connectedn");
 
   
 
  $mqtt->subscribe('emqx/test', function ($topic, $message) {
 
      printf("Received message on topic [%s]: %sn", $topic, $message);
 
  }, 0);
 
      'emqx/test',
 
      // payload
 
      json_encode($payload),
 
      // qos
 
      0,
 
      // retain
 
      true
 
    );
 
    printf("msg $i sendn");
 
    sleep(1);
 
  }
 
   
 
  $mqtt->loop(true);

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读