UNPKG

newbeely-nodejs

Version:

简单易用的轻量级nodejs服务框架. 框架简单到只有组件逻辑,不同的组件提供不同的服务,使用外部的配置文件(只有一个配置文件)方便的组合成一个完整的服务框架. 整个服务使用bearcat(网易开源的nodejs面向切面编程的轻量级框架(AOP))管理,极大的解耦组件间的耦合.(关于代码热更新后续开放).

91 lines (83 loc) 2.2 kB
/** * @filename intercurrent * * @module intercurrent * * @author Gandalfull <orientcountry@gmail.com> * @version 1 * @time 2016-02-19 10:03 */ module.exports = { id: "intercurrent", func: Intercurrent, props: [ {name: "app", ref: "application"} ] } var CP = require('child_process'); var Path = require('path'); var FS = require('fs'); var Async = require('async'); var Logger = require('pomelo-logger').getLogger('newbeely', 'intercurrent'); /** * * @constructor */ function Intercurrent() { /** * * @type {string|string|string|string|string|string|*} */ this.$id = module.exports.id; /** * * @type {null} */ this.app = null; } var inc = 0; /** * 启动一个进程去执行逻辑运算 * * @param code function * @param params Array to function args * @param cb callback */ Intercurrent.prototype.async = function (code, params, cb) { this.workerdir = Path.join(this.app.workedir, '.intercurrent'); if (!FS.existsSync(this.workerdir)) { FS.mkdirSync(this.workerdir); } var _this = this; var script_name = "cp-" + inc++ + ".js"; function process_main() { process.on('message', function (msg) { process.send(domain.apply(null, Array.prototype.slice.call(msg, 0))); }); } Async.waterfall([ function (fn) { FS.writeFile(Path.join(_this.workerdir, script_name), "var domain = " + code.toString() + ";\n\r" + "var main=" + process_main.toString() + ";\n\r" + "main();", function (error) { fn(error); }); }, function (fn) { var cp = CP.fork(Path.join(_this.workerdir, script_name)); cp.send(params); cp.once('message', function (data) { cb(null, data); fn(); cp.kill(); }); }, function () { FS.unlink(Path.join(_this.workerdir, script_name), function (error) { if (error) { Logger.error(error); } }); } ], function (error) { if (error) { cb(error); } }); }