Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – socket.io随着时间的推移RAM使用率上升大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_419_1@
我能做些什么来将ram保持在合理的水平?
在我启动服务器之前,我有大约140mb ram free.
16个小时后,我剩下大约4mb的免费ram.
我在256mb ram的机架空间云上运行它.

var maxMsgs = 50;
var express = require('express'),sio = require('socket.io'),redis = require('redis'),redisStore = require('socket.io/lib/stores/redis');
var app = express.createServer(),pub = redis.createClient(),sub = redis.createClient(),client = redis.createClient();
app.configure(function () {
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.static(__dirname + '/public'));
  app.use(app.router);
});

app.get('/',function (req,res) {
    res.sendfile(__dirname + '/index.html');
});
app.listen(8002,function () {
  var addr = app.address();
  console.log('app listening on http://' + addr.address + ':' + addr.port);
});

var io = sio.listen(app,{log: falsE}),nicknames = {},history = [],user_count = 0,topic = {topic: '',setBy: 'Server'},ytvid = {vid: '',setBy: 'Server'};
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');
io.set('store',new redisStore({redisPub : pub,redisSub : sub,redisClient : client}));
//io.set('resource','socket');

io.sockets.on('connection',function(socket) {
  socket.on('join',function(cu) {
    if(cu.username && cu.username != 'Guest') {
      socket.nickname = cu.username;
      socket.emit('connected',nicknames,history,topic,ytvid);
      nicknames[cu.username] = cu;
      socket.broadcast.emit('nicknames',nicknames);
      user_count++;
      //socket.broadcast.emit('Announcement',{msg: socket.nickname + ' connected'});
    }
  });
  socket.on('message',function(msg,cb) {
    if(msg.msg && msg.msg != '') {
      msg.time = Date.Now() / 1000;
      history.push(msg);
      while(history.length > maxMsgs) history.shift();
      cb(true,msg.timE);
      socket.broadcast.emit('message',msg);
    }
  });
  socket.on('stopic',function(t) {
    if(t.topic && t.setBy && t.topic != '') {
      topic = t;
      io.sockets.emit('topic',t);
    } else {
      topic = {topic: 'No topic set',setBy: 'Admin'};
      io.sockets.emit('topic',topic);
    }
  });
  socket.on('sytvid',function(v) {
    if(v.vid && v.setBy && v.vid != '') {
      ytvid = v;
      io.sockets.emit('ytvid',v);
    } else {
      ytvid = {vid: false,setBy: 'Admin'};
      io.sockets.emit('ytvid',ytvid);
    }
  });
  socket.on('get debug',function() {
    socket.emit('debug',{users: nicknames,history: history,user_count: user_count,topic: topic});
  });
  socket.on('send command',function(C) {
    if(c.type == 'empty') history = [];
    io.sockets.emit('command',c);
  });
  socket.on('disconnect',function() {
    if(!socket.nickName) return;
    if(!nicknames[socket.nickname]) return;
    //nicknames[socket.nickname].status = 'offline';
    delete nicknames[socket.nickname];
    //socket.broadcast.emit('Announcement',{msg: socket.nickname + ' disconnected'});
    socket.broadcast.emit('nicknames',nicknames);
    user_count--;
  });
});

function inArray(needle,haystack){for(var key in haystack){if(needle===haystack[key]){return true;}}return false;}
function zeroPad(digits,n){n=n.toString();while(n.length<digits){n='0'+n;}return n;}
function time(timE){if(time==null)time=new Date();else if((time instanceof DatE)===falsE)time=new Date(timE);return time;}

解决方法

在socket.on(‘join’)点看起来像问题.

我建议你开始使用

var profiler = require('v8-profiler');
seTinterval(function() {
    profiler.takeSnapshot('snappy');
},1000);

像这里描述的http://code.google.com/p/v8/wiki/V8Profiler

所以你现在将在哪里开始泄漏.

还要仔细检查每个变量,对象和范围的分配和释放.

如果您有疑问,请告诉我.

大佬总结

以上是大佬教程为你收集整理的node.js – socket.io随着时间的推移RAM使用率上升全部内容,希望文章能够帮你解决node.js – socket.io随着时间的推移RAM使用率上升所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。