我使用nodejs和socket.io编写代码,用于简单的套接字应用程序(只需连接和断开连接),大约50个用户内存使用量不会变化太多,但对于最多300个用户,一小时后,内存使用量会增长(对于server.js进程接近300MB并且通过时间传递增长),看起来nodejs不释放内存.
var server = require('http').createServer(); var io = require('socket.io')(server); var port = 9090; var sockets = {}; server.listen(port,function () { console.log('Server listening at port ',port); //timer and logs are not problem,i tested it before. setInterval(function(){ console.log(Object.keys(sockets).length+' Online Devices At '+Date()); },1000 * 60 * 1); }); io.on('connection',function(socket){ sockets[socket.id]={id:socket.id}; console.log('connected '+socket.id + ' count ' + Object.keys(sockets).length); socket.on('disconnect',function (data) { delete sockets[socket.id]; console.log('disconnected '+socket.id+ ' count ' +Object.keys(sockets).length); }); });
难道我做错了什么 ?!
编辑
永远启动文件后14小时
300个开放套接字与我的nodejs进程相关的大约500MB内存使用量.
编辑
16小时后,300个连接插座
过程停止后.
编辑
请抓住我的新代码.
var server = require('http').createServer(); var io = require('socket.io')(server); var port = 90; var counter = 0; var clients = {} server.listen(port,function () { console.log('Server listening at port ',port); }); io.on("connection",function(socket){ clients[socket.id] = socket; counter++; socket.on('disconnect',function (data) { counter--; delete clients[socket.id]; }); });
我正在尝试使用1000个连接用户(另一个服务器是模拟用户请求和打开套接字)
启动前的内存使用率:100MB,5分钟后和1000个稳定的开放连接:400MB