您的位置:首页 > 移动开发 > 微信开发

提高微信公众号文章采集效率,anyproxy进阶使用方法(转)

2017-08-08 14:43 357 查看
会导致采集中断,之后就需要人工干预。影响因素主要会有以下几点:1、网络环境不佳;2、手机或模拟器中微信客户端崩溃;3、其它一些网络传输错误;

因为我比较看重采集系统的运行成本,这个成本包括硬件投入,运算力投入和占用的人工精力。所以必须提高运行的稳定性。因此如果采集中断,必然增加人工精力的成本。所以针对这一点我对anyproxy做了一些进阶的改造,并且借助了其它一些工具提高了运行效率。以下就是具体的解决方法:

一、代码升级

1)微信浏览器白屏

解决方法:修改文件requestHandler.js,还是在rule_default.js同级目录下,(mac系统/usr/local/lib/node_modules/anyproxy/lib/;win系统评论区网友cnbattle提供C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib)

在代码中找到proxyReq.on(“error”,function(e){这个函数,并修改内容

//userRes.end();//把这一行注释掉

userRes.end(‘‘);//插入这一行

这样当发生错误时,会返回一个刷新当前页面的js;这样程序就能继续下去了

2)替换所有图片,减轻浏览器负担

首先需要制作一张非常小的图片,我做的是1x1像素,png透明图;放到任意文件夹里。然后修改文件rule_default.js的代码:

在文件开头有许多var的位置加入以下代码

var fs = require(“fs”),

img = fs.readFileSync(“/Library/WebServer/Documents/space.png”);//代码绝对路径替换成自己的

在下面的代码中找到shouldUseLocalResponse : function(req,reqBody){函数,在函数内插入代码:

if(/mmbiz.qpic.cn/i.test(req.url)){

req.replaceLocalFile = true;

return true;

}else{

return false;

}

继续在下面的代码中找到dealLocalResponse : function(req,reqBody,callback){函数,在函数内插入代码:

if(req.replaceLocalFile){

callback(200, {“content-type”:”image/png”},img );

}

这三段代码就会将公众号里面的所有图片替换成本地图片,减轻网络传输压力和浏览器占用的内存,有效的提高运行效率;

3)禁止手机或模拟器访问一些无用的和会导致错误的网址

同样在rule_default.js里找到代码replaceRequestOption : function(req,option){函数,在函数内部插入代码:

var newOption = option;

if(/google|btrace/i.test(newOption.headers.host)){//这里面的正则可以替换成自己不希望访问的网址特征字符串,这里面的btrace是一个腾讯视频的域名,经过实践发现特别容易导致浏览器崩溃,所以加在里面了,继续添加可以使用|分割。

newOption.hostname = “127.0.0.1”;//这个ip也可以替换成其他的

newOption.port = “80”;

}

return newOption;

这个修改之前的文章也提到过了,在这里重新再详细介绍一下。他的用途很多,不同的手机和模拟器都有可能访问一些无用的地址导致设备变慢,通过这个代码就可以阻止访问。

二、使用pm2管理anyproxy进程

pm2 是一个带有负载均衡功能的Node应用的进程管理器.
当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).

主要特性:

内建负载均衡(使用Node cluster 集群模块)
后台运行
0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
具有Ubuntu和CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

测试过Nodejs v0.11 v0.10 v0.8版本,兼容CoffeeScript,基于Linux 和MacOS.


首先安装pm2

sudo npm install -g pm2

在pm2环境下运行anyproxy

sudo pm2 start anyproxy -x – -i

现在anyproxy就在pm2的环境中运行了

之后还有几个pm2的命令可以帮助管理和监控anyproxy

//查看运行日志

sudo pm2 logs anyproxy [–lines 10]

//关闭anyproxy

sudo pm2 delete anyproxy

//重启anyproxy

sudo pm2 restart anyproxy

//监控内存占用

sudo pm2 monit

//监控运行状态

sudo pm2 list

特别提示:pm2运行后,终端窗口是可以关闭的。

使用pm2管理anyproxy进程,最重要的目的是:anyproxy因为错误而退出程序之后,pm2可以另anyproxy自动重启。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: