gpt4 book ai didi

javascript - Socket.io 绑定(bind) - 性能和内存使用

转载 作者:行者123 更新时间:2023-11-29 18:14:24 25 4
gpt4 key购买 nike

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

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

这是否意味着 foobar 等的绑定(bind)是针对每个套接字、每个新连接单独完成的?如果有 1000 个连接,是否会有 1000 个相同的 foo 回调函数实例?

如果是这样,由于 Node 将保留 1000 个匿名但相同的函数,这不会浪费大量内存吗?

最佳答案

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

Socket.io 的 Socket 类继承自 node 的 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 */
}

关于javascript - Socket.io 绑定(bind) - 性能和内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com