use uWS as optional dependency for ws server (#3231)

* use uWS as optional dependency for ws server

* Update ParseWebSocketServer.js
This commit is contained in:
Florent Vilmart
2017-01-14 10:43:31 -05:00
committed by Arthur Cinader
parent b2a3479dbf
commit c26db2248f
3 changed files with 14 additions and 3 deletions

View File

@@ -84,6 +84,7 @@
"parse-server": "./bin/parse-server" "parse-server": "./bin/parse-server"
}, },
"optionalDependencies": { "optionalDependencies": {
"bcrypt": "1.0.2" "bcrypt": "1.0.2",
"uws": "^0.12.0"
} }
} }

View File

@@ -14,7 +14,9 @@ describe('ParseWebSocketServer', function() {
it('can handle connect event when ws is open', function(done) { it('can handle connect event when ws is open', function(done) {
var onConnectCallback = jasmine.createSpy('onConnectCallback'); 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 = { var ws = {
readyState: 0, readyState: 0,
OPEN: 0, OPEN: 0,
@@ -27,6 +29,7 @@ describe('ParseWebSocketServer', function() {
// Make sure we ping to the client // Make sure we ping to the client
setTimeout(function() { setTimeout(function() {
expect(ws.ping).toHaveBeenCalled(); expect(ws.ping).toHaveBeenCalled();
server.close();
done(); done();
}, 10) }, 10)
}); });

View File

@@ -1,12 +1,19 @@
import logger from '../logger'; import logger from '../logger';
const typeMap = new Map([['disconnect', 'close']]); const typeMap = new Map([['disconnect', 'close']]);
const getWS = function() {
try {
return require('uws');
} catch(e) {
return require('ws');
}
}
export class ParseWebSocketServer { export class ParseWebSocketServer {
server: Object; server: Object;
constructor(server: any, onConnect: Function, websocketTimeout: number = 10 * 1000) { constructor(server: any, onConnect: Function, websocketTimeout: number = 10 * 1000) {
const WebSocketServer = require('ws').Server; const WebSocketServer = getWS().Server;
const wss = new WebSocketServer({ server: server }); const wss = new WebSocketServer({ server: server });
wss.on('listening', () => { wss.on('listening', () => {
logger.info('Parse LiveQuery Server starts running'); logger.info('Parse LiveQuery Server starts running');