套接字io分裂function到不同的文件

我已经习惯了node.js中的路由工作方式,但是让我给你一个socket.io节点服务器的典型例子:

/** * Created by root on 3/13/15. */ var multer = require('multer'); var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); var cookieParser = require('socket.io-cookie-parser'); var moment = require('moment'); var mysql = require('mysql'); var users = []; var message = ""; io.use(cookieParser()); io.on('connection', function (socket) { var userDetails = {}; /* Connection (after login) */ socket.on('userData', function (userDetails) { users[userDetails.id] = socket; userDetails = 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; }); }); http.listen(8105, function () { console.log('listening on *:8105'); }); 

这工作正常。 但是当需要扩展和创build多个function,如聊天和stream式传输时,这个文件可能会变得很长,很难维护。

所以我的问题是如何分解套接字连接到不同的文件,甚至有可能?

我在这里寻找的是一些最好的实践用法,喜欢一些例子。

试试以下代码:

 socketio.on('connection', function (socket) { // ... socket.on('isOnline', function (user_id) { require('user-online.js').register(socket, user_id); }); socket.on('sendNotification', function (args) { require('notification/handler.js').handler(socket, args); }); // ... });