如何在node.js和socket.io应用程序中组织套接字处理

对于我的REST API,我已经为每个路线创build了一个文件。

app.get('/api/user', routes.user.index); app.get('/api/user/login', routes.user.login); 

等等

现在我将socket.io引入到后端,看来我只能为所有套接字事件调用一个函数。

 var socket = require('./socket/stuff.js'); io.sockets.on('connection', function(sock){ socket.stuff(sock, io); }); 

我应该如何分解./socket/stuff.js文件(输出的stuff )。 进入单独的文件。 我想最终用套接字取代我的REST API,但是我不想把所有的东西放在一个文件中。

我想我会有:

 ./socket/chat.js ./socket/user.js 

等等

要在不同的文件中组织事件处理程序,可以使用如下所示的结构:

./main.js

 var io = require('socket.io'); var Chat = require('./EventHandlers/Chat'); var User = require('./EventHandlers/User'); var app = { allSockets: [] }; io.sockets.on('connection', function (socket) { // Create event handlers for this socket var eventHandlers = { chat: new Chat(app, socket), user: new User(app, socket) }; // Bind events to handlers for (var category in eventHandlers) { var handler = eventHandlers[category].handler; for (var event in handler) { socket.on(event, handler[event]); } } // Keep track of the socket app.allSockets.push(socket); }); 

./EventHandlers/Chat.js

 var Chat = function (app, socket) { this.app = app; this.socket = socket; // Expose handler methods for events this.handler = { message: message.bind(this) // use the bind function to access this.app ping: ping.bind(this) // and this.socket in events }; } // Events function message(text) { // Broadcast message to all sockets this.app.allSockets.emit('message', text); }); function ping() { // Reply to sender this.socket.emit('message', 'PONG!'); }); module.exports = Chat;