【发布时间】:2017-11-15 12:52:16
【问题描述】:
我有一个 master.js 和一个 slave.js
每当 master.js 需要更多的 slave 来处理数据时,它就会 .fork 它们。
在 slave.js 中(截断)
portscanner.findAPortNotInUse(config.wss.start_port, config.wss.end_port)
.then((port) => {
httpsServer.listen(port);
process.send('Connected and listening on : ' + port);
})
起始端口为 11001,结束端口为 11100。
现在有时 slave4 和 slave5 都认为 11004 是空闲的,都绑定到该端口并抛出 EADDRINUSE。
master.js
function CreateSlave(mode, amount) {
return new Promise((res) => {
var c = connected_slaves;
for (var i = 0; i < amount; i++) {
var id = uuid.v4().split("-")[0];
slaves[c] = fork('/opt/nodeapps/ass/slave/server.js',
[serverKeyForSession, mode]);
slaves[c].id = id;
slaves[c].mode = mode;
AttachHandlerToSlave(c).then((res) => {
if (res) return;
});
c++;
}
});
}
function AttachHandlerToSlave(c) {
return new Promise((res, rej) => {
slaves[c].on('message', (msg) => {
console.log('\x1b[33m['+ slaves[c].id +'] | \x1b[0m'+msg);
});
res(true);
});
}
如何防止此类行为?
【问题讨论】:
标签: javascript node.js port race-condition