From 9a3f5e98f51568047ec88bbb6d4474af03186218 Mon Sep 17 00:00:00 2001 From: tom zhou Date: Tue, 5 May 2020 11:13:02 -0700 Subject: [PATCH] fixed multiple path ws server --- lib/websocketpp-server.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/websocketpp-server.js b/lib/websocketpp-server.js index 0013dd5..7e8b215 100644 --- a/lib/websocketpp-server.js +++ b/lib/websocketpp-server.js @@ -79,6 +79,9 @@ class WebSocketServer extends EventEmitter { ); } else if (options.server) { this._server = options.server; + // cache path set + if (!this._server.wsppathes) this._server.wsppathes = new Set(); + if (options.path) this._server.wsppathes.add(options.path); } if (this._server) { @@ -135,6 +138,11 @@ class WebSocketServer extends EventEmitter { const server = this._server; if (server) { + // delete path + if (this.options.path && server.wsppathes) { + server.wsppathes.delete(this.options.path); + } + this._removeListeners(); this._removeListeners = this._server = null; @@ -187,6 +195,19 @@ class WebSocketServer extends EventEmitter { const version = +req.headers['sec-websocket-version']; const extensions = {}; + // check on path + if (!this.shouldHandle(req)) { + const index = req.url.indexOf('?'); + const wspth = index !== -1 ? req.url.slice(0, index) : req.url; + + if (this._server && this._server.wsppathes && this._server.wsppathes.has(wspth)) { + // let other ws server handle it + return; + } else { + return abortHandshake(socket, 400); + } + } + if ( req.method !== 'GET' || req.headers.upgrade.toLowerCase() !== 'websocket' ||