refactor: Refine code

This commit is contained in:
avwo
2017-04-21 20:19:25 +08:00
parent 22696a4879
commit cff4e0ae12
5 changed files with 81 additions and 67 deletions
+18 -35
View File
@@ -1,12 +1,16 @@
var tls = require('tls');
var Q = require('q');
var ca = require('./ca');
var getServer = require('../util/get-server').create(createTLSServer);
var MAX_SERVERS = 320;
var MAX_PORT = 60000;
var curPort = 42000;
var TIMEOUT = 6000;
// var DELAY = 100;
function createTLSServer(options, listener) {
return tls.createServer(options, listener);
}
function ServerAgent() {
this._cache = {};
this._serverCount = 0;
@@ -14,7 +18,7 @@ function ServerAgent() {
var proto = ServerAgent.prototype;
proto.createServer = function createServer(hostname, secureConnectionListener, callback) {
proto.createServer = function createServer(hostname, listener, callback) {
var self = this;
var cache = self._cache;
@@ -33,19 +37,18 @@ proto.createServer = function createServer(hostname, secureConnectionListener, c
}
self.freeServer();
getServer(ca.createCertificate(hostname), secureConnectionListener,
function(port, server) {
var removeServer = function() {
self.removeServer(hostname);
};
server.on('error', removeServer);
promise.server = server;
var timeout = setTimeout(removeServer, TIMEOUT);
server.once('secureConnection', function() {
clearTimeout(timeout);
getServer(ca.createCertificate(hostname), listener, function(server, port) {
var removeServer = function() {
self.removeServer(hostname);
};
server.on('error', removeServer);
promise.server = server;
var timeout = setTimeout(removeServer, TIMEOUT);
server.once('secureConnection', function() {
clearTimeout(timeout);
});
defer.resolve(port);
});
defer.resolve(port);
});
self._serverCount++;
return self;
@@ -116,26 +119,6 @@ proto.freeServer = function() {
// }
//};
function getServer(options, secureConnectionListener, callback) {
curPort++;
if (curPort > MAX_PORT) {
curPort = 30001;
} else if (curPort % 10 === 0) {
curPort++;
}
var server = tls.createServer(options, secureConnectionListener);
var next = function() {
getServer(options, secureConnectionListener, callback);
};
server.on('error', next);
var port = curPort;
server.listen(port, function() {
server.removeListener('error', next);
callback(port, server);
});
}
module.exports = ServerAgent;