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