socket.io代码结构:放置方法的位置?

时间:2013-05-26 09:02:39

标签: javascript node.js 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)
    });
});

现在,处理客户端何时加入的方法以及处理之后发送和接收消息的方法都放在服务器上的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...

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

1 个答案:

答案 0 :(得分:2)

当你打电话时,

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

您倾听事件 xyz并将功能listener添加为事件处理程序。只要xyz出现,就会执行它。所以当你这样做时:

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

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

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

在连接发生之前/之后,任何时候都有两个听众。

以前的方法更有效率和逻辑性。逻辑因为textconnect发生之前不会发生,所以为什么要听呢。事件循环中的高效没有不必要的事件要查找。添加太多事件可能不会造成太大伤害,但对于性能关键型应用程序来说,这可能是一个拖累。后者看起来不错,所有事件处理程序都是一个接一个放置。