From 280678c33c01aed84c440072dc8d5ffce0007366 Mon Sep 17 00:00:00 2001 From: benlong Date: Fri, 27 Jan 2012 14:26:51 -0800 Subject: [PATCH 1/3] added support for redis host and port arguments --- lib/juggernaut/channel.js | 4 ++++ lib/juggernaut/client.js | 3 ++- lib/juggernaut/connection.js | 4 ++-- lib/juggernaut/events.js | 8 +++++++- lib/juggernaut/index.js | 11 +++++++---- lib/juggernaut/publish.js | 4 ++-- lib/juggernaut/redis.js | 4 ++-- lib/juggernaut/server.js | 4 ++-- server.js | 6 ++++-- 9 files changed, 32 insertions(+), 16 deletions(-) diff --git a/lib/juggernaut/channel.js b/lib/juggernaut/channel.js index a48614f..e2f3bcc 100644 --- a/lib/juggernaut/channel.js +++ b/lib/juggernaut/channel.js @@ -6,6 +6,10 @@ Channel = module.exports = require("./klass").create(); Channel.extend({ channels: {}, + initEventsClient: function(redisPort, redisHost) { + Events.initEvents(redisPort, redisHost); + }, + find: function(name){ if ( !this.channels[name] ) this.channels[name] = Channel.inst(name) diff --git a/lib/juggernaut/client.js b/lib/juggernaut/client.js index 74c8124..9832ba7 100644 --- a/lib/juggernaut/client.js +++ b/lib/juggernaut/client.js @@ -5,7 +5,8 @@ var Events = require("./events"); Client = module.exports = require("./klass").create(); Client.include({ - init: function(conn){ + init: function(conn, redisPort, redisHost){ + Events.initClient(redisPort, redisHost); this.connection = conn; this.session_id = this.connection.session_id; }, diff --git a/lib/juggernaut/connection.js b/lib/juggernaut/connection.js index ea78a47..8ce54e3 100644 --- a/lib/juggernaut/connection.js +++ b/lib/juggernaut/connection.js @@ -3,10 +3,10 @@ var Client = require("./client"); Connection = module.exports = require("./klass").create(); Connection.include({ - init: function(stream){ + init: function(stream, redisPort, redisHost){ this.stream = stream; this.session_id = this.stream.id; - this.client = Client.inst(this); + this.client = Client.inst(this, redisPort, redisHost); this.stream.on("message", this.proxy(this.onmessage)); this.stream.on("disconnect", this.proxy(this.ondisconnect)); diff --git a/lib/juggernaut/events.js b/lib/juggernaut/events.js index 8eabffb..7476da8 100644 --- a/lib/juggernaut/events.js +++ b/lib/juggernaut/events.js @@ -2,7 +2,13 @@ var redis = require("./redis"); Events = module.exports = {}; -Events.client = redis.createClient(); +Events.initEvents = function(redisPort, redisHost) { + this.initClient(redisPort, redisHost); +}; + +Events.initClient = function(redisPort, redisHost) { + this.client = redis.createClient(redisPort, redisHost); +}; Events.publish = function(key, value){ this.client.publish( diff --git a/lib/juggernaut/index.js b/lib/juggernaut/index.js index 58f0c55..8b7142a 100644 --- a/lib/juggernaut/index.js +++ b/lib/juggernaut/index.js @@ -3,8 +3,11 @@ require("./ext/array"); var Publish = require("./publish"); var Server = require("./server"); -module.exports.listen = function(port){ - Publish.listen(); - var server = Server.inst(); - server.listen(port); +module.exports.listen = function(nodePort, redisPort, redisHost){ + var redisPort = (redisPort || "6379"); + var redisHost = (redisHost || "127.0.0.1"); + + Publish.listen(redisPort, redisHost); + var server = Server.inst(redisPort, redisHost); + server.listen(nodePort); }; \ No newline at end of file diff --git a/lib/juggernaut/publish.js b/lib/juggernaut/publish.js index 747e56e..cca0fab 100644 --- a/lib/juggernaut/publish.js +++ b/lib/juggernaut/publish.js @@ -4,8 +4,8 @@ var Message = require("./message"); var Channel = require("./channel"); Publish = module.exports = {}; -Publish.listen = function(){ - this.client = redis.createClient(); +Publish.listen = function(redisPort, redisHost){ + this.client = redis.createClient(redisPort, redisHost); this.client.on("message", function(_, data) { util.log("Received: " + data); diff --git a/lib/juggernaut/redis.js b/lib/juggernaut/redis.js index 7f8edf2..e2395d0 100644 --- a/lib/juggernaut/redis.js +++ b/lib/juggernaut/redis.js @@ -2,7 +2,7 @@ var util = require("util"); var url = require("url"); var redis = require("redis"); -module.exports.createClient = function(){ +module.exports.createClient = function(redisPort, redisHost){ var client; if (process.env.REDISTOGO_URL) { @@ -10,7 +10,7 @@ module.exports.createClient = function(){ client = redis.createClient(address.port, address.hostname); client.auth(address.auth.split(":")[1]); } else { - client = redis.createClient(); + client = redis.createClient(redisPort, redisHost); } // Prevent redis calling exit diff --git a/lib/juggernaut/server.js b/lib/juggernaut/server.js index 219b30d..e99723a 100644 --- a/lib/juggernaut/server.js +++ b/lib/juggernaut/server.js @@ -20,7 +20,7 @@ Server = module.exports = require("./klass").create(); var fileServer = new nstatic.Server(path.normalize(__dirname + "../../../public")); Server.include({ - init: function(){ + init: function(redisPort, redisHost){ var connectionListener = function(request, response){ request.addListener("end", function() { @@ -44,7 +44,7 @@ Server.include({ } this.io = io.listen(this.httpServer); - this.io.sockets.on("connection", function(stream){ Connection.inst(stream) }); + this.io.sockets.on("connection", function(stream){ Connection.inst(stream, redisPort, redisHost) }); }, listen: function(port){ diff --git a/server.js b/server.js index a3e5b89..dc99d3d 100755 --- a/server.js +++ b/server.js @@ -8,7 +8,9 @@ var help = [ "Starts a juggernaut server using the specified command-line options", "", "options:", - " --port PORT Port that the proxy server should run on", + " --port PORT Port that the proxy server should run on", + " --redisport PORT Port for redis server", + " --redishost HOST Host for redis server", " --silent Silence the log output", " -h, --help You're staring at it" ].join('\n'); @@ -18,4 +20,4 @@ if (argv.h || argv.help) { } Juggernaut = require("./index"); -Juggernaut.listen(argv.port); \ No newline at end of file +Juggernaut.listen(argv.port, argv.redisport, argv.redishost); \ No newline at end of file From 94404a717bc34608a3d78e0592c0d1831ca39d2a Mon Sep 17 00:00:00 2001 From: benlong Date: Fri, 27 Jan 2012 14:38:28 -0800 Subject: [PATCH 2/3] forgot publish>channel>event init --- lib/juggernaut/publish.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/juggernaut/publish.js b/lib/juggernaut/publish.js index cca0fab..a4a037e 100644 --- a/lib/juggernaut/publish.js +++ b/lib/juggernaut/publish.js @@ -17,5 +17,6 @@ Publish.listen = function(redisPort, redisHost){ Channel.publish(message); }); + Channel.initEventsClient(redisPort, redisHost); this.client.subscribe("juggernaut"); }; From 0aef3b4d27d76d0251c85b4f48250b21244872d4 Mon Sep 17 00:00:00 2001 From: benlong Date: Mon, 6 Feb 2012 11:08:49 -0800 Subject: [PATCH 3/3] only create event on initialization. bail if event already exists to prevent multiple redis connections --- lib/juggernaut/events.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/juggernaut/events.js b/lib/juggernaut/events.js index 7476da8..6dbb86b 100644 --- a/lib/juggernaut/events.js +++ b/lib/juggernaut/events.js @@ -1,12 +1,14 @@ var redis = require("./redis"); Events = module.exports = {}; +Events.client = null; Events.initEvents = function(redisPort, redisHost) { this.initClient(redisPort, redisHost); }; Events.initClient = function(redisPort, redisHost) { + if (this.client) return; this.client = redis.createClient(redisPort, redisHost); };