IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> tp6 怎么运行mqtt,如何在tp6框架里 运行mqtt 发布和订阅 -> 正文阅读

[PHP知识库]tp6 怎么运行mqtt,如何在tp6框架里 运行mqtt 发布和订阅

如何在tp6框架里 运行mqtt 发布和订阅
已经用mqtt/php-client做了一版,可以运行。但是容易断开连接,不知道什么参数没有配置对。

启动服务

win平台

php think mqttSub

Linux平台

#!/bin/bash
sleep 10
app_dir="/www/wwwroot/hq.maotouying.cc"
pid=${app_dir}/runtime/mqttSub_pid.pid
su - www  <<EOF
echo "start mqttSub...."
echo $app_dir
echo $pid
if [ -f "$pid" ]
then
        if [ $(cat $pid) ]
        then
                kill -9 `cat ${app_dir}/runtime/mqttSub_pid.pid`
        fi
fi
nohup /usr/bin/php ${app_dir}/think mqttSub > ${app_dir}/runtime/mqttSub`date +'%Y-%m-%d'`.log 2>&1 &
echo $! > ${app_dir}/runtime/mqttSub_pid.pid
echo "mqttSub started"
EOF

指令配置文件

return [
    // 指令定义
    'commands' => [
        'mqttSub' => 'app\command\mqttSubscribe',
    ],
];

指令定义

mqttSubscribe.php

<?php
declare (strict_types = 1);

namespace app\command;

use app\admin\service\MqttSubService;
use think\console\Command;
use think\console\Input;
use think\console\Output;

class mqttSubscribe extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('mqttsubscribe')
            ->setDescription('the mqttsubscribe command');
    }

    protected function execute(Input $input, Output $output)
    {
        // 指令输出
        $MqttSubService = new MqttSubService();
        $output->writeln($MqttSubService->sub());
    }
}

mqttSubService.php核心业务方法

    public function sub()
    {
        ignore_user_abort(true);//后台运行
        set_time_limit(0);//取消超时限制
        date_default_timezone_set('PRC');//设置为中国时区
        // 创建mqtt实例
        $this->mqtt = new \PhpMqtt\Client\MqttClient($this->host, $this->port, $this->client);
        // 参数定义
        $connectionSettings = (new \PhpMqtt\Client\ConnectionSettings)
            // 连接到代理时用于身份验证的用户名。
            ->setUsername($this->username)
            // 连接到代理时用于身份验证的密码。
            ->setPassword($this->password)
            // 连接超时定义了客户端将尝试与代理建立
            // 套接字连接的最大秒数。该值不能小于 1 秒。
//            ->setConnectTimeout(3)
            // 套接字超时是套接字连接的最大空闲时间(以秒为单位)。
            // 如果在给定的秒数内没有读取或发送数据,套接字将关闭。
            // 该值不能小于 1 秒。
//            ->setSocketTimeout(30)
            // 重新发送超时是客户端在发送重复的待处理消息之前等待的秒数
            // 未经确认。该值不能小于 1 秒。
//            ->setResendTimeout(10)
            // 保持活动间隔是客户端在不发送消息的情况下等待的秒数
            // 直到它向代理发送保持活动信号 (ping)。该值不能小于 1 秒
            // 并且不能大于 65535 秒。合理的值是 10 秒(默认值)。
//            ->setKeepAliveInterval(10)
            // 如果代理应该在客户端突然断开连接时以客户端的名义发布最后一条消息,则此设置定义将发布消息的主题。
            // 只有在配置此设置和最后一条消息时才会发布最后一条消息。
//            ->setLastWillTopic(null)
            // 如果代理应该在客户端突然断开连接时以客户端的名义发布最后一条消息,则此设置定义将发布的消息。
            // 只有在配置了此设置和最后一个遗嘱
            // 主题时才会发布最后一个遗嘱消息。
//            ->setLastWillMessage(null)
            // 客户端的最后一条消息将发布的服务质量级别,
            // 如果它被触发。
//            ->setLastWillQualityOfService(0)
            // 这个标志决定了客户端的最后一条遗嘱消息是否会被保留,如果它被触发了。使用此设置可以很方便地通过发布
            // 最后遗嘱中保留的离线状态和作为连接时的第一条消息的在线状态来指示客户端离线。
//            ->setRetainLastWill(false)
            // 此标志确定是否应将 TLS 用于连接。
            //用于连接代理的端口必须支持 TLS 连接。
//            ->setUseTls(false)

            // 此标志确定是否验证对等证书,是否使用 TLS。
//            ->setTlsVerifyPeer(true)

            // 此标志确定是否验证对等名称,是否使用 TLS。
//            ->setTlsVerifyPeerName(true)

            // 此标志确定是否应接受对等方的自签名证书。
            // 将此设置为 TRUE 意味着存在安全风险,应避免用于生产场景和公共服务。
//            ->setTlsSelfSignedAllowed(true)

            // 用于验证对等方证书的证书颁发机构证书的路径,如果使用 TLS。
//            ->setTlsCertificateAuthorityFile(null)

            // 包含证书颁发机构证书的目录的路径,用于验证对等证书(如果使用 TLS)。
//            ->setTlsCertificateAuthorityPath(null)

            // 用于身份验证的客户端证书文件的路径(如果使用 TLS)。
            // 客户端证书必须是 PEM 编码的。它可以选择包含颁发者的证书链。
//            ->setTlsClientCertificateFile(null)

            // 用于身份验证的客户端证书密钥文件的路径(如果使用 TLS)。
            // 此选项还需要使用 ConnectionSettings::setTlsClientCertificateFile()。
//            ->setTlsClientCertificateKeyFile(null)

            // 用于解密客户端证书私钥的密码,如果使用 TLS,则用于身份验证。
            // 此选项还需要使用 ConnectionSettings::setTlsClientCertificateFile() 和
            // ConnectionSettings::setTlsClientCertificateKeyFile()。
            ->setTlsClientCertificateKeyPassphrase(null);
        // 若mqtt链接失败
        $this->mqtt->connect($connectionSettings,true);
        if (!$this->mqtt->isConnected()){
            echo "mqtt链接失败";
        }
        $this->mqtt->subscribe($this->topics_name,function($topic,$message){
            $this->message($topic,$message);
        });

        $this->mqtt->loop(true);
        $this->mqtt->disconnect();
    }

正在使用workerman/mqtt做第二版,目前测试可以。上线稳定运行后,回来上代码!!!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:04:22  更:2021-12-15 18:05:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 21:25:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计