我是「服務器端JS」的新手,找不到使用node.js和Redis-Sub進行長輪詢的示例。Node.js redis訂閱內存泄漏
下面的代碼運行良好,但今天我注意到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
函數'function(req,res)'在服務器收到請求時運行。每次運行時,一個處理程序由'client.on(「message」,...)'設置。這些處理程序不會被刪除;因此每次收到請求時內存使用率都會增加。 不僅如此,每次redis客戶端收到一條消息時,都會運行function(channel,message)函數。如果'res'已經被髮送,推測它不會做任何事情,但是如果有許多處理程序,這可能會導致大量的開銷。 (在這種情況下,您會看到處理每個請求的延遲。) –
結帳:http://book.mixu.net/node/ch3.html – bryanmac
您想做什麼?我大致瞭解我認爲它會做什麼,我看不出有任何合理的理由。客戶端請求和Redis數據之間的連接是什麼? –