socket.io代码结构:在哪里放置方法?

当使用socket.io库时,我对如何放置不同的方法有点困惑。

在一个非常简单的聊天应用程序中,我有server.js

 io.sockets.on('connection', function(socket) { //some methods to handle when clients join. socket.on('text', function(msg) { socket.broadcast.emit('text', msg); }); }); 

client.js

 var socket = io.connect(); socket.on('connect', function() { //some methods to fire when client joins. socket.on('text', function(msg) { console.log(msg) }); }); 

现在,客户端join时处理的方法以及之后处理消息发送和接收的方法被放置在服务器端和客户端的connect / connection事件方法中,但是这种结构似乎可以作为以及在客户端:

 var socket = io.connect(); socket.on('connect', function() { //some methods to fire when client joins. }); socket.on('text', function(msg) { console.log(msg) }); +potentially many more methods... 

我的问题是,在连接方法和外部放置一个方法和什么被认为是最好的select之间的根本区别是什么?

当你打电话给这个时,

 socket.on('xyz', function listener() {}); 

您侦听事件 xyz并添加函数listener作为事件处理程序 。 它在xyz发生时执行。 所以当你这样做时:

 socket.on('connect', function() { socket.on('text', function(msg) { console.log(msg) }); }); 

只有当connect事件发生时才会添加text事件处理程序/侦听器(连接事件处理程序被执行)。 发生connect之前只有一个侦听器, connect发生时只有两个(一个)。 但是,当你这样做:

 socket.on('connect', function() { //some methods to fire when client joins. }); socket.on('text', function(msg) { console.log(msg) }); 

在连接发生之前/之后,随时有两个听众。

以前的方法更高效和合乎逻辑。 逻辑,因为connect发生之前text不能发生,所以为什么要听它。 在事件循环中的效率没有不必要的事件要查找。 增加太多的事件可能并不会造成太大的影响,但对于性能至关重要的应用程序来说,这可能是一个阻力 后一个看起来不错,所有的事件处理程序一个接一个放置。