【问题标题】:socket.io code structure: where to place methods?socket.io 代码结构:在哪里放置方法?
【发布时间】:2013-05-26 09:02:39
【问题描述】:

在使用 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 方法内部和外部之间的根本区别是什么,什么被认为是最佳选择?

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    当你调用它时,

    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 发生之前发生,所以为什么要听它。与事件循环一样高效,不需要寻找不必要的事件。添加太多事件可能不会造成太大伤害,但对于性能关键型应用程序来说,这可能是一个拖累。后者只是看起来不错,所有事件处理程序都一个一个放置。

    【讨论】:

    • 非常感谢您如此清晰而准确的解释,这非常有意义。
    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2012-08-20
    相关资源
    最近更新 更多