【发布时间】:2015-11-20 14:54:37
【问题描述】:
我创建了一个简单的 nodejs 服务器和客户端。它们通过 15000 个 tcp 套接字相互交互。
客户端代码:
'use strict';
const net = require('net');
for (let i = 0; i < 15000; ++i) {
let socket = new net.Socket();
socket.connect(6000, '127.0.0.1', () => {
console.log('Connected');
socket.write('data to server');
});
socket.on('data', data => {
console.log(data);
});
socket.on('close', () => {
console.log('Connection closed');
});
}
服务器代码:
'use strict';
const net = require('net');
let sockets = [];
let server = net.createServer(socket => {
socket.write('blabla from server');
socket.on('data', data => {
console.log(data);
});
sockets.push(socket);
if (sockets.length >= 15000) {
setTimeout(() => {
console.log('cleanup start');
for (let socket of sockets) {
socket.end();
socket.destroy();
socket.unref();
}
console.log('cleaned up and ready');
}, 80000);
}
});
if (global.gc) {
setInterval(() => {
global.gc();
}, 15000);
}
setInterval(() => {
console.log(process.memoryUsage());
}, 5000);
server.listen(6000, '127.0.0.1');
他们发送和接收消息。在创建套接字期间,内存使用率变高。但在销毁套接字后,我预计内存使用率会变低,这不会发生。
【问题讨论】: