【phpMQTT】phpMQTT详解以及处理使用过程中内存耗死问题
参考文档: https://www.cloudmqtt.com/docs-php.html
github下载 : https://github.com/bluerhinos/phpMQTT
CloudMQTT 概述: https://www.cloudmqtt.com/docs.html
CloudMQTT 除了有php的类库,还有python,java.net等mqtt的类库。
一、phpMQTT详解
客户端发布:
//publish.php
require("phpMQTT.php"); $host = "hostname"; //主机
$port = port; //端口
$username = "username"; //如果没有则为空
$password = "password"; //如果没有则为空
$message = "Hello CloudMQTT!"; //要发送的消息 //phpMQTT 有四个参数:主机,端口,客户端id,证书。官网这里的案例没写证书,请参考phpMQTT类
//没有证书的时候只能连接1883端口,不能连接8883端口。
$mqtt = new phpMQTT($host, $port, "ClientID".rand());
//连接
if ($mqtt->connect(true,NULL,$username,$password)) {
$mqtt->publish("topic",$message, 0);
$mqtt->close(); //关闭
}else{
echo "Fail or time out<br />";
}
服务端订阅
// 注意:订阅请用窗口或者后台去运行,不要再页面运行。
require("phpMQTT.php");
ignore_user_abort(true); // 后台运行
set_time_limit(0); // 取消脚本运行时间的超时上限
date_default_timezone_set('PRC'); //设置中国时区 $host = "hostname";
$port = port;
$username = "username";
$password = "password";
//同样这里少了证书参数
$mqtt = new phpMQTT($host, $port, "ClientID".rand()); if(!$mqtt->connect(true,NULL,$username,$password)){
exit(1);
} //currently subscribed topics
$topics['topic'] = array("qos"=>0, "function"=>"procmsg");
$mqtt->subscribe($topics,0); while($mqtt->proc()){ //无限去请求
} $mqtt->close();
function procmsg($topic,$msg){//输出消息
echo "Msg Recieved: $msg";
}
二、内存耗死问题
场景:(订阅)链接不上mqtt的时候,一下代码会出错:
文件名: phpMQTT.php
错误分析:链接不到mqtt的时候,$this->socket这个结果为false,while里面的一直会循环,$string的大小会耗死内存。所以加一个判断,按如下代码修改。
if ($this->socket) {
while (!feof($this->socket) && $togo>0) {
$fread = fread($this->socket, $togo);
$string .= $fread;
$togo = $int - strlen($string);
}
}
搞定
【phpMQTT】phpMQTT详解以及处理使用过程中内存耗死问题的更多相关文章
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- 详解js变量、作用域及内存
详解js变量.作用域及内存 来源:伯乐在线 作者:trigkit4 原文出处: trigkit4 基本类型值有:undefined,NUll,Boolean,Number和Strin ...
- 详解在Word文档中常见的各种公式编辑问题
正常情况下,我们在安装完成MathType之后会直接加载在Word文档中,Word文档中的MathType比较复杂,新手操作遇到麻烦也是常有的事,今天就来给大家详解下Word文档中常见的MathTyp ...
- logback的使用和logback.xml详解,在Spring项目中使用log打印日志
logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分 ...
- 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
- python模块详解 | selenium(持续更新中)
目录: 关于selenium Selenium 安装Selenium 安装浏览器驱动 配置环境变量 selenium方法详解 定位元素 元素操作 浏览器操作 鼠标事件 浏览器事件 设置元素等待 多表单 ...
- Android 网络框架之Retrofit2使用详解及从源码中解析原理
就目前来说Retrofit2使用的已相当的广泛,那么我们先来了解下两个问题: 1 . 什么是Retrofit? Retrofit是针对于Android/Java的.基于okHttp的.一种轻量级且安全 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route
前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...
随机推荐
- 【springboot】【socket】spring boot整合socket,实现服务器端两种消息推送
参考地址:https://www.cnblogs.com/hhhshct/p/8849449.html
- android fastjson 解析
JSONObject jsonObject = JSON.parseObject(wsResponse);String recommends = jsonObject.getString(" ...
- Linux ./configure --prefix命令
源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install),具体的安装方法一般作者都会给出文档,这里主要讨论配置(configure).Configu ...
- MUI右滑关闭窗口用Webview的drag实现
mui.init({swipeBack:true}); 必须要用很快的速度摩擦屏幕才能达到右滑关闭窗口的效果,且在右边一般都会失效. mui这个滑动,是纯前端的,这个效率在Android上确实一般. ...
- conda虚拟环境
https://blog.csdn.net/lyy14011305/article/details/59500819 1.首先在所在系统中安装Anaconda.可以打开命令行输入conda -V检验是 ...
- Java LinkedList工作原理及实现
1. 概述 以双向链表实现.链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作. 按下标访问元素—get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组 ...
- Chart-template
ylbtech-Chart: 1.返回顶部 1-1. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返回顶部 8.返回顶部 9.返回顶部 ...
- [leetcode]Minimum Window Substring @ Python
原题地址:https://oj.leetcode.com/problems/minimum-window-substring/ 题意: Given a string S and a string T, ...
- pytorch中检测分割模型中图像预处理探究
Object Detection and Classification using R-CNNs 目标检测:数据增强(Numpy+Pytorch) - 主要探究检测分割模型数据增强操作有哪些? - 检 ...
- Redis在SSM项目中的简单使用
一.基于SSM的Redis环境配置 前提是你的开发电脑安装和配置好了redis,如果没安装请看Window配置Redis环境和简单使用 1.1.pom文件中引入redis客户端jar包(pom.xml ...