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 */ };