套接字.IO代码结构:在哪里放置方法

socket.io code structure: where to place methods?

本文关键字:方法 在哪里 IO 代码 结构 套接字      更新时间:2023-09-26

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

当你调用这个时,

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

您监听事件 xyz并添加函数listener作为事件处理程序。只要出现xyz,它就执行。所以当你这样做的时候:

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

text的事件处理程序/监听程序仅在connect事件发生时添加(connect事件处理程序被执行)。在connect发生之前只有一个监听器,在connect发生时有两个(多一个)监听器。但是当你这样做的时候:

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

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

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