From c26db2248fcc7aafef26f296b88adf2b52d186f6 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sat, 14 Jan 2017 10:43:31 -0500 Subject: [PATCH] use uWS as optional dependency for ws server (#3231) * use uWS as optional dependency for ws server * Update ParseWebSocketServer.js --- package.json | 3 ++- spec/ParseWebSocketServer.spec.js | 5 ++++- src/LiveQuery/ParseWebSocketServer.js | 9 ++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index daf99807..cae81bfe 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "parse-server": "./bin/parse-server" }, "optionalDependencies": { - "bcrypt": "1.0.2" + "bcrypt": "1.0.2", + "uws": "^0.12.0" } } diff --git a/spec/ParseWebSocketServer.spec.js b/spec/ParseWebSocketServer.spec.js index 1ccba415..7dc70fdb 100644 --- a/spec/ParseWebSocketServer.spec.js +++ b/spec/ParseWebSocketServer.spec.js @@ -14,7 +14,9 @@ describe('ParseWebSocketServer', function() { it('can handle connect event when ws is open', function(done) { var onConnectCallback = jasmine.createSpy('onConnectCallback'); - var parseWebSocketServer = new ParseWebSocketServer({}, onConnectCallback, 5).server; + var http = require('http'); + var server = http.createServer(); + var parseWebSocketServer = new ParseWebSocketServer(server, onConnectCallback, 5).server; var ws = { readyState: 0, OPEN: 0, @@ -27,6 +29,7 @@ describe('ParseWebSocketServer', function() { // Make sure we ping to the client setTimeout(function() { expect(ws.ping).toHaveBeenCalled(); + server.close(); done(); }, 10) }); diff --git a/src/LiveQuery/ParseWebSocketServer.js b/src/LiveQuery/ParseWebSocketServer.js index 575f1c55..c76c36f7 100644 --- a/src/LiveQuery/ParseWebSocketServer.js +++ b/src/LiveQuery/ParseWebSocketServer.js @@ -1,12 +1,19 @@ import logger from '../logger'; const typeMap = new Map([['disconnect', 'close']]); +const getWS = function() { + try { + return require('uws'); + } catch(e) { + return require('ws'); + } +} export class ParseWebSocketServer { server: Object; constructor(server: any, onConnect: Function, websocketTimeout: number = 10 * 1000) { - const WebSocketServer = require('ws').Server; + const WebSocketServer = getWS().Server; const wss = new WebSocketServer({ server: server }); wss.on('listening', () => { logger.info('Parse LiveQuery Server starts running');