diff --git a/lib/index.js b/lib/index.js index 3285b027..b26e57d1 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,3 +1,4 @@ +var _ = require('lodash'); var httpProxy = require('http-proxy'); var configFactory = require('./config-factory'); var handlers = require('./handlers'); @@ -10,7 +11,8 @@ var getArrow = require('./logger').getArrow; module.exports = HttpProxyMiddleware; function HttpProxyMiddleware(context, opts) { - var isWsUpgradeListened = false; + // https://github.com/chimurai/http-proxy-middleware/issues/57 + var wsUpgradeDebounced = _.debounce(handleUpgrade); var config = configFactory.createConfig(context, opts); var proxyOptions = config.options; @@ -28,10 +30,7 @@ function HttpProxyMiddleware(context, opts) { // https://github.com/chimurai/http-proxy-middleware/issues/19 // expose function to upgrade externally - middleware.upgrade = function(req, socket, head) { - handleUpgrade(req, socket, head); - isWsUpgradeListened = true; - }; + middleware.upgrade = wsUpgradeDebounced; return middleware; @@ -52,13 +51,7 @@ function HttpProxyMiddleware(context, opts) { } function catchUpgradeRequest(server) { - // make sure only 1 handle listens to server's upgrade request. - if (isWsUpgradeListened === true) { - return; - } - - server.on('upgrade', handleUpgrade); - isWsUpgradeListened = true; + server.on('upgrade', wsUpgradeDebounced); } function handleUpgrade(req, socket, head) {