Socket.io绑定 - 性能和内存使用情况

时间:2014-07-10 12:58:38

标签: javascript socket.io

典型socket.io应用程序的服务器端如下所示:

io.on("connection", function(socket){
    socket.on("foo", function(data) {
    });
    socket.on("bar", function(data) {
    });
    [ ... ] 
    socket.on("disconnect", function() {
    });
});

这是不是意味着对于每个新连接,每个套接字单独完成foobar等的绑定?如果有1000个连接,那么不会有1000个相同foo回调函数的实例吗?

如果是这样,既然Node会保留1000个匿名但相同的功能,那会不会浪费大量内存?

1 个答案:

答案 0 :(得分:3)

我在谷歌搜索时遇到了你的问题,因为我有同样的担忧。我想通了,但我知道这有点老了,如果它对你没有帮助,希望它能帮助其他人想知道同样的事情。

Socket.io的Socket类继承自节点的EventEmitter(正如您从source code所见)

正如this article解释和演示的那样,EventEmitter将在EventEmitter 实例(在本例中为套接字)的上下文中运行您的回调。

因此,为了更好地实现原始代码(我看到无处不在演示socket.io):

io.on( 'connection', function( socket ) {
    socket.on( 'foo', onFoo );
    socket.on( 'bar', onBar );
    socket.on( 'echo', onEcho );
    // ...
    socket.on( 'disconnect', onDisconnect );
});

function onFoo(data) {
    /* `this` refers to the socket */
}
function onBar(data) {
    /* `this` refers to the socket */
}
function onEcho(data) {
    /* `this` refers to the socket */
    this.emit('echo-back', data);
}
// ...
function onDisconnect() {
    /* `this` refers to the socket */
}