【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.之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开 ...
随机推荐
- WindowManager$BadTokenException: Unable to add window permission denied for this window type
10-11 11:47:27.472: E/AndroidRuntime(12804): java.lang.RuntimeException: Unable to start activity Co ...
- Error-MVC:HTTP Error 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
ylbtech-Error-MVC:HTTP Error 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 1.返回顶部 1. IIS ...
- 使用sshfs挂载远程服务器目录
点击访问原文 您还可以加入全栈技术交流群(QQ群号:254842154) 服务器日志查看,是开发人员和服务器运维人员在工作中经常会遇到的一件事情,只有一台服务器时,比较好办,直接登录服务器使用tail ...
- shell模板变量替换
我们经常使用一些模板语言来处理一些变量替换.比如jsp,php,velocity,freemarker,thymeleaf等.那对于shell来说,应该怎样替换变量呢.有一种很简单的办法可以做到. 先 ...
- MySql之插入操作
一:插入一行数据 INSERT INTO tableName(列名...) VALUES(对应列名的值); 二:插入多行 INSERT INTO tableName(列名...) VALUES(对应列 ...
- Redis系列--内存淘汰机制(含单机版内存优化建议)
https://blog.csdn.net/Jack__Frost/article/details/72478400?locationNum=13&fps=1 每台redis的服务器的内存都是 ...
- fiddler模拟发送get/post请求(也可做简单接口测试)
1.模拟发送请求 (1)fiddler设置post接口信息及参数,点击execute发送请求 (2)fiddler设置get接口信息及参数,点击execute发送请求 2.发送请 ...
- Mocks Aren't Stubs
Mocks Aren't Stubs The term 'Mock Objects' has become a popular one to describe special case objects ...
- 12C新特性--Application Continuity
Application Continuity特性可以在中断后恢复受影响的数据库会话的任务,从而让终端用户和应用程序感觉不到中断的发生.Application Continuity执行恢复的过程是在应用 ...
- 设置log rotation避免tomcat catalina.out文件增长过大
创建logrotate配置文件 $ vi /etc/logrotate.d/tomcat 添加以下内容: /opt/tomcat/logs/catalina.out { copytruncate da ...