From 2ca10b188bdf3faee6473f310c9c4cda994583ee Mon Sep 17 00:00:00 2001 From: Avital Oliver Date: Tue, 1 May 2012 15:37:21 -0700 Subject: [PATCH] On local development server, proxy websocket requests to inner server If the server is not listening, buffer the request as we do for regular HTTP requests --- app/meteor/run.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/meteor/run.js b/app/meteor/run.js index 6c04ea0de1..4322b349ba 100644 --- a/app/meteor/run.js +++ b/app/meteor/run.js @@ -96,6 +96,25 @@ var start_proxy = function (outer_port, inner_port, callback) { } }); + // Proxy websocket requests using same buffering logic as for regular HTTP requests + p.on('upgrade', function(req, socket, head) { + if (Status.listening) { + // server is listening. things are hunky dory! + p.proxy.proxyWebSocketRequest(req, socket, head, { + host: '127.0.0.1', port: inner_port + }); + } else { + // Not listening yet. Queue up request. + var buffer = httpProxy.buffer(req); + request_queue.push(function () { + p.proxy.proxyWebSocketRequest(req, socket, head, { + host: '127.0.0.1', port: inner_port, + buffer: buffer + }); + }); + } + }); + p.on('error', function (err) { if (err.code == 'EADDRINUSE') { process.stderr.write("Can't listen on port " + outer_port