From c29098d00201bb5e16627e7d3f20fef3e8f4409e Mon Sep 17 00:00:00 2001 From: MikeB Date: Fri, 10 Oct 2014 14:16:15 -0500 Subject: [PATCH 1/2] added handle passing cluster fix --- lib/master.js | 27 ++++++++++++++------------- lib/worker.js | 9 +++++++-- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/master.js b/lib/master.js index 2095ad9..db2c475 100644 --- a/lib/master.js +++ b/lib/master.js @@ -29,7 +29,7 @@ Master.prototype.getWorker = function() { return this.workers[pids[this.currentIndex++]]; }; -Master.prototype.distribute = function(socket) { +Master.prototype.distribute = function(handle) { var worker = this.getWorker() var self = this; @@ -38,13 +38,13 @@ Master.prototype.distribute = function(socket) { socket.end('HTTP 1.1 500 Internal Server Error\nContent-Length:0'); } else{ - self.handoff(worker, socket); + self.handoff(worker, handle); } }; -Master.prototype.handoff = function(worker, socket) { +Master.prototype.handoff = function(worker, handle) { var self = this; - worker.send('socket', socket); + worker.send('handle', handle); }; // create the server. @@ -78,15 +78,16 @@ Master.prototype.start = function(callback) { // add our connection handler: // if cluster is used, then the socket is distributed to a worker. // if cluster is not used, then handle in master. - self.server.on('connection', function(socket) { - if (clusterEnabled) { - socket.pause(); - self.distribute(socket); - } - else { - self.worker.handleMessage('socket', socket); - } - }); + if(clusterEnabled){ + self.server._handle.onconnection = function(handle){ + self.distribute(handle); + } + } + else{ + self.server.on('connection', function(socket) { + self.worker.handleMessage('socket', socket); + }); + } }; // remove old file descriptor if needed. diff --git a/lib/worker.js b/lib/worker.js index 7ad54b2..3ca4f81 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -1,5 +1,6 @@ var _ = require('lodash'); var http = require('http'); +var net = require('net'); var util = require('util'); var events = require('events'); @@ -133,10 +134,14 @@ Worker.prototype.handleRequest = function(req, res) { } }; -Worker.prototype.handleMessage = function(message, socket) { +Worker.prototype.handleMessage = function(message, data) { if (message === 'socket') { // call the http connection parsing stuff here. - http._connectionListener.call(this, socket); + http._connectionListener.call(this, data); + } + else if(message === 'handle'){ + var sock = new net.Socket({'fd':data.fd}); + http._connectionListener.call(this,sock); } }; From ed5fed2a4768f4c2105651845a771938a1eb13e9 Mon Sep 17 00:00:00 2001 From: MikeB Date: Fri, 10 Oct 2014 14:16:45 -0500 Subject: [PATCH 2/2] 2.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6d1a3e7..c052c39 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mixdown-server", - "version": "2.0.1", + "version": "2.0.2", "main": "index", "description": "Simple server for activiting a site.", "keywords": [