【问题标题】:Socket.io connection piles up on each refresh每次刷新时 Socket.io 连接都会堆积
【发布时间】:2012-04-04 05:40:20
【问题描述】:

我将 socket.io 与 node.js 一起使用,并且在我的一条路由中,我有连接事件处理程序。

            app.io.on('connection', function(socket) {
                    console.log('connect');

                    socket.on('disconnect', function(){
                        console.log('disconnect');
                        res.end();
                    });
            });

每次我刷新调用此路由的页面时,它似乎一直在增加,例如,如果我刷新 5 次,我将在一次刷新时在日志中获得 5 条“连接”消息.

有没有好的方法来限制它,让它不这样做?

谢谢!

编辑:

当我反复刷新时,我得到这个错误:

(node) 警告:检测到可能的 EventEmitter 内存泄漏。 11 听众补充道。使用emitter.setMaxListeners() 增加限制

我可以提高限制,但我感觉这不是正确的解决方案。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    您必须将代码放在请求处理程序之外(每个请求都会调用该处理程序)。 此代码应该处理所有客户端的传入连接(而不是每个请求)。 在您的示例中,它会为每个请求创建一个新的事件侦听器,您只需要一个!

    【讨论】:

    • 好的,我已经完成了,它可以工作,但是我需要将数据从我的路由代码中传递到套接字连接处理程序,如果我的连接处理程序首先定义在路由之外,那么我如何将一个对象从我的路由传递回我的连接处理程序?
    • 您可以使用数组来存储来自 http-request 的对象并在连接处理程序中读取它们。但我假设您想使用 http 请求向连接的客户端发送一些数据,在这种情况下,您只需在请求处理程序中使用 app.io.emit('myEvent',{msg:'hello world'}); 之类的东西。
    • 完美,是的,这应该没问题。非常感谢
    • @stewe 你能举个例子吗?我是 node.js 的新手,所以我不太明白如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2014-01-15
    • 2021-07-12
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多