Socket.io最佳编码实践

我正在开发一个使用Socket.io来处理实时通信的Node.js应用程序。 我的代码充满了On和Emit函数。 我也使用房间function。 我的应用程序如下所示:

var server = require('http').Server(); var io = require('socket.io')(server); io.on('connection', function(socket){ socket.on('event1', function(data){"lots of socket and non-socket codes" }); socket.on('event2', function(data){"lots of socket and non-socket codes" }); socket.on('event3', function(data){"lots of socket and non-socket codes" }); socket.on('disconnect', function(){"Some other code"}); }); server.listen(portNum); 

它工作正常,但这不是我理想的解决scheme。 首先,在这种方法中,一切都在一个大文件,而不是具有独立function的较小文件。

其次,debugging和维护这个应用程序是相当困难的,因为当涉及到1000多行代码时,这是相当混乱的。

这是我的问题:

开发企业级质量的Socke.io应用程序是否有一个首选/最佳实践? 如果是的话,是否有任何大的开源Socket.io应用程序,这展示了这个接近或任何文章,帮助我重构我的代码更好的fassion?

我认为首先把每个callback函数放在一个不同的函数中,你可以把它们放在io.on('connection')中,也可以把它们放在一个不同的文件中(使用module.exports),你将开始有一个更清晰的应用程序。

好吧,我会给你写一个可能性,我不知道它是否是socket.io的最佳模式,但是我认为这很好。

在你的主文件(与io.onconnection文件),你可以有这样的事情(你不必使用命名空间,这只是一个例子):

 var SocketEvent = require('./socketEvent'); io.of('/user').on('connection', function (socket) { SocketEvent.load_common_event(socket); SocketEvent.load_user_event(socket); }); io.of('/operator').on('connection', function (socket) { SocketEvent.load_common_event(socket); SocketEvent.load_operator_event(socket); }); 

而在你加载的socketEvent.js中可以有这个:

 exports.load_common_event = function(socket){ socket.on('disconnect', function(){"Some other code"}); }; exports.load_user_event = function(socket){ socket.on('event1', function(data){"lots of socket and non-socket codes" }); socket.on('event2', function(data){"lots of socket and non-socket codes" }); socket.on('event3', function(data){"lots of socket and non-socket codes" }); }; exports.load_operator_event = function(socket){ socket.on('event4', function(data){"lots of socket and non-socket codes" }); socket.on('event5', function(data){"lots of socket and non-socket codes" }); socket.on('event6', function(data){"lots of socket and non-socket codes" }); }; 

如果您有任何问题,请告诉我

加上

如果你想要的东西像Socket.on(“事件”,myModule.doSomething);

你可以这样做我猜在模块中:

客户:

 var myModule = require('./socketModule'); io.on('connection', function (socket) { socket.on('event' , myModule.doSomething(/*some parameters (socket)*/)); }); 

服务器socketModule.js:

 exports.doSomething = function(/*some parameters (socket)*/){ /* Some processing around */ };