nodejs socket 使用setInterval 造成CPU逐渐彪满

我的代码 不断用 setinterval 取 redis 的数据



     //连接事件  
    io.sockets.on('connection', function (socket) {  
      
        console.log('有新用户进入...');  
        //叠加当前在线人数  
        onlineCount++;  



        function refresh() {  
             client.mget(['lee'], function (err, res) { 
    //接收步骤省略
    socket.volatile.emit('onlinenums', {finex : finex});  
  });
               
      
        }
        
        var once = setTimeout(refresh,100);
        
        var tweets = setInterval(refresh, 2000);  
        
      
        console.log('当前用户数量:'+onlineCount);  
        //客户端断开连接  
        socket.on('disconnect', function() {  
      
            if(onlineCount > 0 ){  
                //当前在线用户减一  
                onlineCount--;  
                console.log('当前用户数量:'+onlineCount);  
            }  
        });  
    });  


    //启动HTTP服务,绑定端口3000  
    app.listen(3000, function(){  
        console.log('listening on *:3000');  
    });  

这个socket一直挂着 而我的CPU 每七天由于这个node程序 爆掉一次

图片描述

这篇帖子 也没看明白 类似的问题 http://cnodejs.org/topic/570d...

阅读 3.5k
2 个回答

客户端断开连接后 interval没有clear点,处理一下就可以了

每次创建链接创建一个循环,每次关掉链接循环还存在,链接和循环的变量都无法释放

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题