php使用Mosquitto扩展

订阅a.php

<?php

use Mosquitto\Client;

class MqttServer
{
    private $mqtt;

    public function __construct()
    {
        $this->mqtt = new Client();
        $base = str_replace('a.php', '', __FILE__);
        $this->mqtt->setTlsCertificates($base . 'key/ca.crt', $base . 'key/client.crt', $base . 'key/client.key');
        $this->mqtt->setTlsOptions(Client::SSL_VERIFY_NONE, null, null);
        $this->mqtt->setCredentials('root', '123456');
        $this->mqtt->connect("127.0.0.1", 8883, 5);
        $this->mqtt->onConnect([$this, 'handConnect']);
        $this->mqtt->onMessage([$this, 'handleMessage']);
        $this->mqtt->onDisconnect([$this, 'handleDisconnect']);
    }

    public function subscribeToTopics($topics)
    {
        foreach ($topics as $topic => $qos) {
            $this->mqtt->subscribe($topic, $qos);
        }
    }
    
        public function handConnect($rc)
    {
     echo "连接成功$rc\n";
    }
    
            public function publishData($msg,$topic,$qos)
    {
        $this->mqtt->publish($topic, $msg, $qos,false);
    }

    public function handleMessage($message)
    {
        printf("Got a message ID %d on topic %s with payload:\n%s\n\n", $message->mid, $message->topic, $message->payload);
    }

    public function handleDisconnect($rc)
    {
        echo "连接断开$rc\n";
    }

    public function start()
    {
        try {
            $this->mqtt->loop();
        } catch (\Throwable $e) {
            $this->mqtt->connect("127.0.0.1", 8883, 5);
        }
    }
}

$logger = new MqttServer();
$logger->subscribeToTopics(['test'=>0]);
while (true) {
    $logger->start();
}

发布b.php

<?php

use Mosquitto\Client;

class MqttServer
{
    private $mqtt;

    public function __construct()
    {
        $this->mqtt = new Client();
        $base = str_replace('b.php', '', __FILE__);
        $this->mqtt->setTlsCertificates($base . 'key/ca.crt', $base . 'key/client.crt', $base . 'key/client.key');
        $this->mqtt->setTlsOptions(Client::SSL_VERIFY_NONE, null, null);
        $this->mqtt->setCredentials('root', '123456');
        $this->mqtt->connect("127.0.0.1", 8883, 5);
        $this->mqtt->onConnect([$this, 'handConnect']);
        $this->mqtt->onMessage([$this, 'handleMessage']);
        $this->mqtt->onDisconnect([$this, 'handleDisconnect']);
    }

    public function subscribeToTopics($topics)
    {
        foreach ($topics as $topic => $qos) {
            $this->mqtt->subscribe($topic, $qos);
        }
    }

    public function handConnect($rc)
    {
        echo "连接成功$rc\n";
    }

    public function publishData($msg, $topic, $qos)
    {
        $mgid=$this->mqtt->publish($topic, $msg, $qos, false);
        if ($mgid) echo '推送成功'.$mgid."\r\n";
    }

    public function handleMessage($message)
    {
        printf("Got a message ID %d on topic %s with payload:\n%s\n\n", $message->mid, $message->topic, $message->payload);
    }

    public function handleDisconnect($rc)
    {
        echo "连接断开$rc\n";
    }

    public function start()
    {
        try {
            $this->mqtt->loop();
        } catch (\Throwable $e) {
            $this->mqtt->connect("127.0.0.1", 8883, 5);
        }
    }
}

$logger = new MqttServer();
while (true) {
    sleep(2);
    $msg = time() . '消息推送';
    $logger->publishData($msg, 'test', 0);
    $logger->start();
}

分别运行订阅与发布文件


image.png

image.png

php操作Mosquitto相关文档
https://mosquitto-php.readthedocs.io/en/latest/client.html
https://www.hivemq.com/blog/mqtt-client-library-encyclopedia-mosquitto-php/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 13,226评论 0 13
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,078评论 0 2
  • 选择题部分 1.(),只有在发生短路事故时或者在负荷电流较大时,变流器中才会有足够的二次电流作为继电保护跳闸之用。...
    skystarwuwei阅读 14,708评论 0 7
  • 选择题部分 1.()部门负责日常监督检查工作,安全巡视的同时进行消防检查,推动消防安全制度的贯彻落实。 A: 消防...
    skystarwuwei阅读 15,822评论 0 3
  • 一,坦然接纳现在的自己,不要小看任何一个人 在活动后面环节的个人品牌打磨中,我才知道很多人和我一样有副业,做微商。...
    夜空萤语阅读 1,522评论 2 1

友情链接更多精彩内容