我有一个 NodeJs 应用程序,它通过 Redis 服务器上的订阅来监听消息。它收集消息 5 秒,然后将它们推送到连接的客户端,代码如下所示:
io.sockets.on('connection', function (socket) {
nClients++;
console.log("Number of clients connected " + nClients);
socket.on('disconnect', function () {
nClients--;
console.log("Number of clients remaining " + nClients);
});
});
接收要发送给客户端的消息
cli_sub.on("message",function(channel,message) {
oo = JSON.parse(message);
ablv_last_message[oo[0]["base"]+"_"+oo[0]["alt"]] = message;
});
setInterval(function() {
Object.keys(ablv_last_message).forEach( function(key) {
io.sockets.emit('ablv', ablv_last_message[key]);
});
ablv_last_message = [];
}, 5000);
找到的解决方案(至少我是这么认为的):Node 没有崩溃,因为它达到了一些内部内存限制,看起来它崩溃是因为我的 VPS 内存不足,它是一个 2GB VPS 运行一个或两个其他进程。将它升级到 4GB 后,Node 运行平稳,是的,总是在 1.6 到 2.0 GB 左右,但我相信它是 GC 在这里工作的。