diff --git a/Makefile b/Makefile index 9410978c3..caee01cc2 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,14 @@ all: @npm run webpack - @cp -f lib/workers/worker-browser.js browser/bcoin-worker.js browser: @npm run webpack-browser - @cp -f lib/workers/worker-browser.js browser/bcoin-worker.js compat: @npm run webpack-compat - @cp -f lib/workers/worker-browser.js browser/bcoin-worker.js node: @npm run webpack-node - @cp -f lib/workers/worker.js ./bcoin-worker.js clean: @npm run clean diff --git a/browser/index.js b/browser/index.js index e49a381c3..16bed1888 100644 --- a/browser/index.js +++ b/browser/index.js @@ -235,8 +235,7 @@ node = new bcoin.fullnode({ coinCache: 30000000, logConsole: true, workers: true, - workerURL: '/bcoin-worker.js', - masterURL: '/bcoin-master.js', + workerFile: '/bcoin-worker.js', logger: logger }); diff --git a/browser/server.js b/browser/server.js index 42331f159..ea3775126 100644 --- a/browser/server.js +++ b/browser/server.js @@ -8,7 +8,6 @@ const index = fs.readFileSync(`${__dirname}/index.html`); const indexjs = fs.readFileSync(`${__dirname}/index.js`); const debug = fs.readFileSync(`${__dirname}/debug.html`); const bcoin = fs.readFileSync(`${__dirname}/bcoin.js`); -const master = fs.readFileSync(`${__dirname}/bcoin-master.js`); const worker = fs.readFileSync(`${__dirname}/bcoin-worker.js`); let proxy = new WSProxy({ @@ -49,10 +48,6 @@ server.get('/bcoin.js', (req, res) => { res.send(200, bcoin, 'js'); }); -server.get('/bcoin-master.js', (req, res) => { - res.send(200, master, 'js'); -}); - server.get('/bcoin-worker.js', (req, res) => { res.send(200, worker, 'js'); }); diff --git a/lib/node/node.js b/lib/node/node.js index 8e94c7cc6..c1410bf15 100644 --- a/lib/node/node.js +++ b/lib/node/node.js @@ -89,9 +89,7 @@ Node.prototype.initOptions = function initOptions() { enabled: config.bool('workers'), size: config.num('workers-size'), timeout: config.num('workers-timeout'), - workerFile: config.str('worker-file'), - workerURL: config.str('worker-url'), - masterURL: config.str('master-url') + file: config.str('worker-file') }); }; diff --git a/lib/workers/master.js b/lib/workers/master.js index 0797a83e7..007d5690b 100644 --- a/lib/workers/master.js +++ b/lib/workers/master.js @@ -17,7 +17,6 @@ const Framer = require('./framer'); const packets = require('./packets'); const HAS_WORKERS = typeof global.postMessage === 'function'; const HAS_CP = !!(process.stdin && process.stdout && process.stderr); -let server; /** * Represents the master process. @@ -249,9 +248,4 @@ Master.prototype.handlePacket = function handlePacket(packet) { * Expose */ -server = new Master(); - -if (HAS_WORKERS) - global.master = server; - -module.exports = server; +module.exports = Master; diff --git a/lib/workers/worker-browser.js b/lib/workers/worker-browser.js index 0f4f46316..58386bbc5 100644 --- a/lib/workers/worker-browser.js +++ b/lib/workers/worker-browser.js @@ -7,13 +7,14 @@ 'use strict'; +let Master = require('./master'); + self.onmessage = function onmessage(event) { - var env; + let env, server; self.onmessage = function() {}; env = JSON.parse(event.data); - - self.importScripts(env.BCOIN_MASTER_URL); - self.master.listen(env); + server = new Master(); + server.listen(env); }; diff --git a/lib/workers/worker.js b/lib/workers/worker.js index c227e49c6..1d1d25f9d 100644 --- a/lib/workers/worker.js +++ b/lib/workers/worker.js @@ -7,6 +7,7 @@ 'use strict'; -let master = require('./master'); +let Master = require('./master'); +let server = new Master(); -master.listen(process.env); +server.listen(process.env); diff --git a/lib/workers/workerpool.js b/lib/workers/workerpool.js index 35451396b..0306f7e33 100644 --- a/lib/workers/workerpool.js +++ b/lib/workers/workerpool.js @@ -52,9 +52,7 @@ function WorkerPool(options) { this.nonce = 0; this.enabled = true; - this.workerFile = WorkerPool.WORKER_FILE; - this.workerURL = WorkerPool.WORKER_URL; - this.masterURL = WorkerPool.MASTER_URL; + this.file = WorkerPool.WORKER_FILE; bindExit(); pools.add(this); @@ -78,20 +76,6 @@ WorkerPool.CORES = getCores(); WorkerPool.WORKER_FILE = process.env.BCOIN_WORKER_FILE || 'worker.js'; -/** - * Default worker URL. - * @const {String} - */ - -WorkerPool.WORKER_URL = process.env.BCOIN_WORKER_URL || '/bcoin-worker.js'; - -/** - * Default master URL. - * @const {String} - */ - -WorkerPool.MASTER_URL = process.env.BCOIN_MASTER_URL || '/bcoin-master.js'; - /** * Set worker pool options. * @param {Object} options @@ -118,19 +102,9 @@ WorkerPool.prototype.set = function set(options) { this.timeout = options.timeout; } - if (options.workerFile != null) { - assert(typeof options.workerFile === 'string'); - this.workerFile = options.workerFile; - } - - if (options.workerURL != null) { - assert(typeof options.workerURL === 'string'); - this.workerURL = options.workerURL; - } - - if (options.masterURL != null) { - assert(typeof options.masterURL === 'string'); - this.masterURL = options.masterURL; + if (options.file != null) { + assert(typeof options.file === 'string'); + this.file = options.file; } }; @@ -176,7 +150,9 @@ WorkerPool.prototype.close = async function close() { */ WorkerPool.prototype.spawn = function spawn(id) { - let child = new Worker(id, this); + let child = new Worker(this.file); + + child.id = id; child.on('error', (err) => { this.emit('error', err, child); @@ -416,18 +392,17 @@ WorkerPool.prototype.scrypt = async function scrypt(passwd, salt, N, r, p, len) * Represents a worker. * @alias module:workers.Worker * @constructor - * @param {Number} id - * @param {Object} options + * @param {String} file */ -function Worker(id, options) { +function Worker(file) { if (!(this instanceof Worker)) - return new Worker(id, options); + return new Worker(file); EventEmitter.call(this); - this.id = id; - this.options = options; + this.file = file; + this.id = -1; this.framer = new Framer(); this.parser = new Parser(); @@ -435,7 +410,6 @@ function Worker(id, options) { this.child = null; this.env = { - BCOIN_MASTER_URL: this.options.masterURL, BCOIN_WORKER_NETWORK: Network.type, BCOIN_WORKER_ISTTY: process.stdout ? (process.stdout.isTTY ? '1' : '0') @@ -484,7 +458,7 @@ Worker.prototype._init = function _init() { */ Worker.prototype._initWebWorkers = function _initWebWorkers() { - this.child = new global.Worker(this.options.workerURL); + this.child = new global.Worker(this.file); this.child.onerror = (event) => { this.emit('error', new Error('Worker error.')); @@ -515,7 +489,7 @@ Worker.prototype._initWebWorkers = function _initWebWorkers() { Worker.prototype._initChildProcess = function _initChildProcess() { let bin = process.argv[0]; - let file = path.resolve(__dirname, this.options.workerFile); + let file = path.resolve(__dirname, this.file); let env = Object.assign({}, process.env, this.env); let options = { stdio: 'pipe', env: env }; diff --git a/package.json b/package.json index 8ef7057cf..69f96c91d 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "bcoin": "./bin/bcoin" }, "scripts": { - "clean": "rm -f {browser/,}{bcoin.js,bcoin-master.js,bcoin-worker.js}", + "clean": "rm -f {browser/,}{bcoin.js,bcoin-worker.js}", "docs": "jsdoc -c jsdoc.json", "lint": "eslint lib/ test/ migrate/ examples/ bench/ scripts/*.js bin/cli bin/node bin/spvnode || exit 0", "lint-file": "eslint", diff --git a/webpack.browser.js b/webpack.browser.js index 999ea1f66..3229d7940 100644 --- a/webpack.browser.js +++ b/webpack.browser.js @@ -10,7 +10,7 @@ module.exports = { target: 'web', entry: { 'bcoin': './lib/bcoin-browser', - 'bcoin-master': './lib/workers/master' + 'bcoin-worker': './lib/workers/worker-browser' }, output: { path: path.join(__dirname, 'browser'), @@ -24,11 +24,13 @@ module.exports = { new webpack.DefinePlugin({ 'process.env.BCOIN_NETWORK': str(env.BCOIN_NETWORK || 'main'), - 'process.env.BCOIN_WORKER_URL': - str(env.BCOIN_WORKER_URL || '/bcoin-worker.js'), - 'process.env.BCOIN_MASTER_URL': - str(env.BCOIN_MASTER_URL || '/bcoin-master.js') + 'process.env.BCOIN_WORKER_FILE': + str(env.BCOIN_WORKER_FILE || '/bcoin-worker.js') }), - new UglifyJsPlugin() + new UglifyJsPlugin({ + compress: { + warnings: true + } + }) ] }; diff --git a/webpack.compat.js b/webpack.compat.js index 2fef01938..424508c41 100644 --- a/webpack.compat.js +++ b/webpack.compat.js @@ -9,7 +9,7 @@ module.exports = { target: 'web', entry: { 'bcoin': './lib/bcoin-browser', - 'bcoin-master': './lib/workers/master' + 'bcoin-worker': './lib/workers/worker-browser' }, output: { path: path.join(__dirname, 'browser'), @@ -30,10 +30,8 @@ module.exports = { new webpack.DefinePlugin({ 'process.env.BCOIN_NETWORK': str(env.BCOIN_NETWORK || 'main'), - 'process.env.BCOIN_WORKER_URL': - str(env.BCOIN_WORKER_URL || '/bcoin-worker.js'), - 'process.env.BCOIN_MASTER_URL': - str(env.BCOIN_MASTER_URL || '/bcoin-master.js') + 'process.env.BCOIN_WORKER_FILE': + str(env.BCOIN_WORKER_FILE || '/bcoin-worker.js') }), new webpack.optimize.UglifyJsPlugin({ compress: { diff --git a/webpack.node.js b/webpack.node.js index 6a1d1e620..d27705063 100644 --- a/webpack.node.js +++ b/webpack.node.js @@ -40,6 +40,10 @@ module.exports = { str(env.BCOIN_WORKER_FILE || 'bcoin-worker.js') }), new webpack.IgnorePlugin(/^utf-8-validate|bufferutil$/), - new UglifyJsPlugin() + new UglifyJsPlugin({ + compress: { + warnings: true + } + }) ] };