1

在使用 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...

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

4

1 回答 1

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)
});

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

以前的方法更有效和合乎逻辑。合乎逻辑,因为text在发生之前不可能connect发生,所以为什么要听它。与事件循环一样高效,不需要寻找不必要的事件。添加太多的事件可能不会造成太大的伤害,但对于性能关键的应用程序来说,这可能是一种拖累。后一个看起来不错,所有事件处理程序都一个一个放置。

于 2013-05-26T16:49:22.880 回答