mirror of https://github.com/lukechilds/node.git
Browse Source
Before this, cluster behaves not the way it is documented. When disconnect is triggered, worker must wait for every server is closed before doing disconnect actually. Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> PR-URL: https://github.com/nodejs/io.js/pull/1400 Fixes: https://github.com/nodejs/io.js/issues/1305v2.3.1-release
Oleg Elifantiev
10 years ago
committed by
Sam Roberts
2 changed files with 58 additions and 2 deletions
@ -0,0 +1,42 @@ |
|||
'use strict'; |
|||
|
|||
var common = require('../common'); |
|||
var assert = require('assert'); |
|||
var cluster = require('cluster'); |
|||
var net = require('net'); |
|||
|
|||
if (cluster.isWorker) { |
|||
net.createServer(function(socket) { |
|||
// Wait for any data, then close connection
|
|||
socket.on('data', socket.end.bind(socket)); |
|||
}).listen(common.PORT, common.localhostIPv4); |
|||
} else if (cluster.isMaster) { |
|||
|
|||
var connectionDone; |
|||
var ok; |
|||
|
|||
// start worker
|
|||
var worker = cluster.fork(); |
|||
|
|||
// Disconnect worker when it is ready
|
|||
worker.once('listening', function() { |
|||
net.createConnection(common.PORT, common.localhostIPv4, function() { |
|||
var socket = this; |
|||
worker.disconnect(); |
|||
setTimeout(function() { |
|||
socket.write('.'); |
|||
connectionDone = true; |
|||
}, 1000); |
|||
}); |
|||
}); |
|||
|
|||
// Check worker events and properties
|
|||
worker.once('disconnect', function() { |
|||
assert.ok(connectionDone, 'disconnect should occur after socket close'); |
|||
ok = true; |
|||
}); |
|||
|
|||
process.once('exit', function() { |
|||
assert.ok(ok); |
|||
}); |
|||
} |
Loading…
Reference in new issue