如何将Socket.io路由代码分离到不同的文件中

假设你有一个这样的server.js

 io.on('connection', function (socket) { var userDetails = {}; /* Connection (after login) */ socket.on('userData', function (userDetails) { users[userDetails.id] = socket; userDetails = userDetails; require('user-online.js').register(socket, userDetails); }); //Notification socket.on('sendNotification', function (users, notification) { users.forEach(function (y) { if(users[y] != null){ users[y].emit(notification); } }) }); socket.emit('newNotification', 'hell'); socket.emit('someEvent', 'hello world'); socket.on('browserClose', function (msg) { console.log('this user has disconnect: ' + userDetails.username); users[userDetails.id] = null; }); //check connection / status of other sockets: socket.on('isOnline', function(user_id){ socket.emit('userStatus', users[user_id] != null); }); socket.on('setMyLocation', function(location){ users[userDetails.id].location = location; }); }); 

我不打扰把所有上述的东西放在它连接的地方,因为它与我的问题无关。

我的问题是基本上这个server.js文件可以变得相当凌乱,当添加更多的代码。 我想将我的套接字的任务分成不同的JavaScript文件。 但是我不确定他们是如何工作的,而且我根本找不到任何地方的例子。

我的想法是有一个处理程序的以下任务:

  • 通知
  • 上传/下载文件

任何人都可以把我推向正确的方向吗?还是有人有一些文件?

你应该创build一个模块来pipe理客户端的连接,我命名为“客户端pipe理”:

 var ClientManagement = function() { var self = this; this.messageListeners = []; /** * Add a messsage listener(require a onClientMessage(data,socket) function in the listener) * @param listener */ this.addMessageListener = function(listener) { this.messageListeners.push(listener); }; this.onMessage = function(data, socket) { for (var i = 0; i < this.messageListeners.length; i++) { try { this.messageListeners[i].onClientMessage(data, socket); } catch (exc) { } } }; this.start=function(){ var io = require('socket.io')(8080); io.sockets.on('connection', function(socket) { /** * Receive message from client */ socket.on('message', function(data) { self.onMessage(data, socket); }); }); }); } module.exports = new ClientManagement(); 

使用这个模块:

 var clientManagementModule = require('./modules/client-management.js'); clientManagementModule.start(); var notificationModule = require('./modules/notification.js'); var chatModule = require('./modules/chat.js'); clientManagementModule.addMessageListener(notificationModule); clientManagementModule.addMessageListener(chatModule);