gpt4 book ai didi

Node.js redis 订阅内存泄漏

转载 作者:IT王子 更新时间:2023-10-29 06:04:40 25 4
gpt4 key购买 nike

我是“服务器端 JS”的新手,找不到使用 node.js 和 Redis-Sub 进行长轮询的示例。

以下代码运行良好,但今天我注意到 RAM 使用量为 650MB,并且代码仅运行了 6 天。

var http     = require('http'),
redis = require('redis'),
client = redis.createClient();

client.subscribe("example");

http.createServer(function (req, res) {

res.setHeader('Access-Control-Allow-Origin', 'https://mywebsite.com');
res.setHeader('Access-Control-Allow-Methods', 'GET');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);

res.writeHead(200, {'Content-Type': 'application/json'});

client.on("message", function (channel, message) {

res.end( JSON.stringify( message ) );

});

}).listen(8080);

有人可以指出内存泄漏并解释一下吗?

我的 node.js 版本是:v0.10.21

最佳答案

“内存泄漏”来自代码client.on。您在请求/响应函数中调用它。 client.on 是一个发射器(参见 redis 源代码,index.js:111(从今天的 npm 安装开始)),它定义了函数 on

Adds a listener to the end of the listeners array for the specified event. (Nodejs-Docs: 1)

因此,您不断向客户端添加“消息” 功能。将 client.on 移到此请求/响应“循环”之外,它应该停止“泄漏”。

关于Node.js redis 订阅内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com