afrokick 6 年之前
父节点
当前提交
1f58c60ecc
共有 3 个文件被更改,包括 35 次插入45 次删除
  1. 1 1
      config/schema.js
  2. 25 36
      src/index.js
  3. 9 8
      src/services/webSocketServer/index.js

+ 1 - 1
config/schema.js

@@ -32,7 +32,7 @@ module.exports = convict({
   path: {
   path: {
     doc: '',
     doc: '',
     format: String,
     format: String,
-    default: '/'
+    default: '/myapp'
   },
   },
   ip_limit: {
   ip_limit: {
     doc: 'Max connections per ip',
     doc: 'Max connections per ip',

+ 25 - 36
src/index.js

@@ -29,42 +29,6 @@ if (config.get('proxied')) {
   app.set('trust proxy', config.get('proxied'));
   app.set('trust proxy', config.get('proxied'));
 }
 }
 
 
-app.on('mount', () => {
-  if (!server) {
-    throw new Error('Server is not passed to constructor - ' +
-        'can\'t start PeerServer');
-  }
-
-  // TODO
-  app._setCleanupIntervals();
-
-  const wss = new WebSocketServer(server, app.mountpath);
-
-  wss.on('connection', client => {
-    const messages = realm.getMessageQueueById(client.getId());
-
-    messages.forEach(message => messageHandler(client, message));
-
-    realm.clearMessageQueue(client.getId());
-
-    logger.info(`client ${client.getId()} was connected`);
-  });
-
-  wss.on('message', (client, message) => {
-    messageHandler(client, message);
-  });
-
-  wss.on('close', client => {
-    logger.info(`client ${client.getId()} was disconnected`);
-  });
-
-  wss.on('error', error => {
-    logger.error(error);
-  });
-
-  app._wss = wss;
-});
-
 let server;
 let server;
 
 
 if (config.get('ssl.key_path') && config.get('ssl.cert_path')) {
 if (config.get('ssl.key_path') && config.get('ssl.cert_path')) {
@@ -83,6 +47,31 @@ if (config.get('ssl.key_path') && config.get('ssl.cert_path')) {
 
 
 app.use(path, api);
 app.use(path, api);
 
 
+const wss = new WebSocketServer(server, app.mountpath);
+
+wss.on('connection', client => {
+  const messages = realm.getMessageQueueById(client.getId());
+
+  if (messages) {
+    messages.forEach(message => messageHandler(client, message));
+    realm.clearMessageQueue(client.getId());
+  }
+
+  logger.info(`client ${client.getId()} was connected`);
+});
+
+wss.on('message', (client, message) => {
+  messageHandler(client, message);
+});
+
+wss.on('close', client => {
+  logger.info(`client ${client.getId()} was disconnected`);
+});
+
+wss.on('error', error => {
+  logger.error(error);
+});
+
 server.listen(port, () => {
 server.listen(port, () => {
   const host = server.address().address;
   const host = server.address().address;
   const port = server.address().port;
   const port = server.address().port;

+ 9 - 8
src/services/webSocketServer/index.js

@@ -8,26 +8,26 @@ const realm = require('../realm');
 const Client = require('../../models/client');
 const Client = require('../../models/client');
 
 
 class WebSocketServer extends EventEmitter {
 class WebSocketServer extends EventEmitter {
-  constructor (server, mountpath) {
+  constructor (server) {
     super();
     super();
     this.setMaxListeners(0);
     this.setMaxListeners(0);
 
 
     this._ips = {};
     this._ips = {};
 
 
-    if (mountpath instanceof Array) {
-      throw new Error('This app can only be mounted on a single path');
-    }
-
-    let path = mountpath;
+    let path = config.get('path');
     path = path + (path[path.length - 1] !== '/' ? '/' : '') + 'peerjs';
     path = path + (path[path.length - 1] !== '/' ? '/' : '') + 'peerjs';
 
 
+    logger.info(`ws opened on path:${path}`);
+
     this._wss = new WSS({ path, server });
     this._wss = new WSS({ path, server });
 
 
-    this._wss.on('connection', this._onSocketConnection);
-    this._wss.on('error', this._onSocketError);
+    this._wss.on('connection', (socket, req) => this._onSocketConnection(socket, req));
+    this._wss.on('error', (error) => this._onSocketError(error));
   }
   }
 
 
   _onSocketConnection (socket, req) {
   _onSocketConnection (socket, req) {
+    logger.debug(`[WSS] on new connection:${req}`);
+
     const { query = {} } = url.parse(req.url, true);
     const { query = {} } = url.parse(req.url, true);
 
 
     const { id, token, key } = query;
     const { id, token, key } = query;
@@ -60,6 +60,7 @@ class WebSocketServer extends EventEmitter {
   }
   }
 
 
   _onSocketError (error) {
   _onSocketError (error) {
+    logger.debug(`[WSS] on error:${error}`);
     // handle error
     // handle error
     this.emit('error', error);
     this.emit('error', error);
   }
   }