Skip to content

Commit

Permalink
v1.1.1
Browse files Browse the repository at this point in the history
v1.1.1
  • Loading branch information
839128 authored Jun 16, 2020
2 parents 8814d4c + 0879b75 commit a0227aa
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 56 deletions.
4 changes: 3 additions & 1 deletion bin/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,7 @@
"logs" : "/Volumes/Angela.Fang/Phoebe/uTorrent/logs",
"port" : 7003,
"debug" : true,
"token" : false
"token" : false,
"size" : 4,
"ignore" : true
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"crypto-js": "^3.1.8",
"joi": "^11.1.1",
"lodash": "^4.17.4",
"puppeteer": "^1.19.0"
"puppeteer": "^2.1.1"
},
"devDependencies": {
"gulp": "^3.9.1",
Expand Down
58 changes: 34 additions & 24 deletions src/app/bootstrap.class.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
import Net from 'net';
import Path from 'path';

import Koa from 'koa';
import Cors from 'koa-cors';
import KoaLogger from 'koa-logger';
import KoaConvert from 'koa-convert';
import KoaFavicon from 'koa-favicon';
import KoaBetterBody from 'koa-better-body';

import DefaultConfig from './feature/config/clazz/default.config.class';

import Logger from './frames/core/logger.core.class';
import Service from './frames/core/service.core.class';
import Controller from './frames/core/controller.core.class';
import Router from './frames/core/router.core.class';

import AbstractService from './frames/base/service.base.class';
import AbstractController from './frames/base/controller.base.class';
import AbstractRouter from './frames/base/router.base.class';
import Unify from "./shared/utils/unify.utils.class";
import Result from "./shared/term/result.term.class";

import Net from 'net';
import Path from 'path';

import Koa from 'koa';
import Cors from 'koa-cors';
import KoaLogger from 'koa-logger';
import KoaConvert from 'koa-convert';
import KoaFavicon from 'koa-favicon';
import KoaBetterBody from 'koa-better-body';

import DefaultConfig from './feature/config/clazz/default.config.class';

import Logger from './frames/core/logger.core.class';
import Service from './frames/core/service.core.class';
import Controller from './frames/core/controller.core.class';
import Router from './frames/core/router.core.class';

import AbstractService from './frames/base/service.base.class';
import AbstractController from './frames/base/controller.base.class';
import AbstractRouter from './frames/base/router.base.class';
import Unify from "./shared/utils/unify.utils.class";
import Render from "./shared/utils/render.utils.class";
import Result from "./shared/term/result.term.class";

export default class Bootstrap {

Expand All @@ -41,6 +41,7 @@ export default class Bootstrap {
this._xRouter();
this._xResource();
this._xServer();
this._xBrowser();
logger.trace('Server Start Total Cost : ' + (new Date() - this.startTime) + 'ms');
logger.trace('Current Service Version : ' + config.Version);
}
Expand Down Expand Up @@ -84,7 +85,6 @@ export default class Bootstrap {
}

_xBetterBody() {
// this.koa.use(new KoaBodyParser());
this.koa.use(KoaConvert(KoaBetterBody({
multipart: true,
formLimit: '500kb'
Expand Down Expand Up @@ -151,4 +151,14 @@ export default class Bootstrap {
logger.trace('Finish Load Handle');
}

async _xBrowser() {
logger.trace('Chromium start is : ' + config.size);
let render = [];
for (let i = 0; i < config.size; i++) {
render[i] = await Render.init();
}
global.browser = render;
logger.trace('Chromium start is : ' + config.size);
}

}
11 changes: 6 additions & 5 deletions src/app/feature/config/clazz/default.config.class.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ export default class DefaultConfig {
this.RootPath = rootPath + '/app';
this.setPathConfig();
this.setEnvConfig();
this.setDialectConfig();
this.setServerConfig();
this.setBrowserConfig();
}

setPathConfig() {
Expand All @@ -34,12 +34,13 @@ export default class DefaultConfig {
}
}

setDialectConfig() {
this.dialect = this.objConfig.dialect;
}

setServerConfig() {
this.Port = this.objConfig.port;
}

setBrowserConfig() {
this.size = this.objConfig.size;
this.ignore = this.objConfig.ignore;
}

}
76 changes: 51 additions & 25 deletions src/app/shared/utils/render.utils.class.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,27 @@ import _C from '../../shared/term/criteria.term.class';

export default class Render {

static async init() {
const browser = await puppeteer.launch({
headless: config.debug,
ignoreHTTPSErrors: config.ignore,
devtools: false,
args: [
'--disable-gpu',
'--disable-dev-shm-usage',
'--disable-setuid-sandbox',
'--no-first-run',
'--no-sandbox',
'--no-zygote',
'--single-process',
"--proxy-server='direct://'",
'--proxy-bypass-list=*',
],
sloMo: config.debug ? 250 : undefined
});
return browser.wsEndpoint();
}

/**
* 根据参数信息,获取内容,生成文件
*
Expand All @@ -21,7 +42,7 @@ export default class Render {
height: 1200
},
goto: {
waitUntil: 'networkidle2'
waitUntil: 'networkidle0'
},
output: _C.FOTMAT_TYPE_PDF,
pdf: {
Expand All @@ -32,33 +53,30 @@ export default class Render {
type: 'png',
fullPage: true
},
failEarly: false
failEarly: false,
waitFor: 6000
}, _opts);

if (_.get(_opts, 'pdf.width') && _.get(_opts, 'pdf.height')) {
// pdf.format 会覆盖宽度和高度,所以我们必须删除它
opts.pdf.format = undefined;
}

logger.trace('RENDER => ' + JSON.stringify({
opts
}));
this.logOpts(opts);

const browser = await puppeteer.launch({
headless: config.debug,
ignoreHTTPSErrors: opts.ignoreHttpsErrors,
args: ['--disable-gpu', '--no-sandbox', '--disable-setuid-sandbox'],
sloMo: config.debug ? 250 : undefined
});
const page = await browser.newPage();
let browserWSEndpoint = browser[Math.floor(Math.random() * config.size)];
const chrome = await puppeteer.connect({browserWSEndpoint,ping_interval:'None',ping_timeout:'None'});
logger.trace('RENDER => browserWSEndpoint connect ...'+ Math.floor(Math.random() * config.size));
const page = await chrome.newPage();

await page.setCacheEnabled(true);

page.on('error', (err) => {
logger.error(`RENDER => Error event emitted: ${err}`);
logger.error(err.stack);
browser.close();
page.close();
});


this.failedResponses = [];
page.on('requestfailed', (request) => {
this.failedResponses.push(request);
Expand Down Expand Up @@ -95,7 +113,7 @@ export default class Render {
await client.send('Network.setCookies', {cookies: opts.cookies});
}

if (opts.html) {
if (_.isString(opts.html)) {
logger.trace('RENDER => Set HTML ..');
await page.setContent(opts.html, opts.goto);
} else {
Expand All @@ -107,7 +125,7 @@ export default class Render {

if (_.isNumber(opts.waitFor) || _.isString(opts.waitFor)) {
logger.trace(`RENDER => Wait for ${opts.waitFor} ..`);
await page.waitFor(parseInt(opts.waitFor));
await page.waitFor(~~opts.waitFor);
}

if (opts.scrollPage) {
Expand Down Expand Up @@ -140,6 +158,8 @@ export default class Render {

if (opts.output === _C.FOTMAT_TYPE_PDF) {
data = await page.pdf(opts.pdf);
}else if (opts.output === _C.FOTMAT_TYPE_HTML) {
data = await page.evaluate(() => document.body.innerHTML);
} else {
const screenshotOpts = _.cloneDeep(_.omit(opts.screenshot, ['clip']));
const clipContainsSomething = _.some(opts.screenshot.clip, val => !_.isUndefined(val));
Expand All @@ -148,23 +168,17 @@ export default class Render {
}
data = await page.screenshot(screenshotOpts);
}
data.title = opts.attachmentName;
} catch (err) {
logger.trace(`RENDER <= Error when rendering page: ${err}`);
logger.error(err.stack);
throw err;
} finally {
logger.trace('RENDER <= Closing browser..');
await browser.close();
logger.trace('RENDER <= Closing page..');
await page.close();
}
return data;
}

/**
* 滚动到页面末尾以触发延迟加载所有元素
*
* @param {page} Page.
*/
static async scrollPage(page) {
await page.evaluate(() => {
const scrollInterval = 100;
Expand Down Expand Up @@ -203,6 +217,8 @@ export default class Render {
static getMimeType(opts) {
if (opts.output === _C.FOTMAT_TYPE_PDF) {
return 'application/pdf';
}else if (opts.output === _C.FOTMAT_TYPE_HTML) {
return 'text/html';
}
const type = _.get(opts, 'screenshot.type');
switch (type) {
Expand All @@ -215,6 +231,16 @@ export default class Render {
}
}

static logOpts(opts) {
const supressedOpts = _.cloneDeep(opts);
if (opts.html) {
supressedOpts.html = '...';
}
logger.trace('RENDER => ' + JSON.stringify({
opts
}));
}

/**
* 获取提交参数信息
*
Expand All @@ -228,7 +254,7 @@ export default class Render {
emulateScreenMedia: query.emulateScreenMedia,
ignoreHttpsErrors: query.ignoreHttpsErrors,
waitFor: ~~query.waitFor,
output: query.output || _C.FOTMAT_TYPE_PDF,
output: query.output || _C.FOTMAT_TYPE_PDF || _C.FOTMAT_TYPE_HTML,
viewport: {
width: query['viewport.width'],
height: query['viewport.height'],
Expand Down

0 comments on commit a0227aa

Please sign in to comment.