我有一個承載WebSocket服務器的NodeJS。 WebSocket重新分配來自Redis的消息。NodeJS + Redis + WebSocket內存管理?
完整的一行是,我有一些Python腳本,在Redis中推送一些數據,之後NodeJS是將Redis新輸入數據讀取到連接客戶端的WebSocket。我的問題是NodeJs總是佔用內存,過了一段時間它就會突然停止。
我不知道我的問題是什麼,因爲我的代碼非常簡單。
我不需要我的WebSocket接收來自連接客戶端的消息,因爲我只需要將它們推送到數據中,但是需要大量數據。
var server = require('websocket').server,
http = require('http');
var redis = require("redis"),
client = redis.createClient();
var socket = new server({
httpServer: http.createServer().listen(443),
keepalive: false
});
client.subscribe("attack-map-production");
socket.on('request', function(request) {
var connection = request.accept(null, request.origin);
connection.on('message', function(message) {
console.log(message);
client.on("message", function(channel, message){
connection.send(message);
});
});
connection.on('close', function(connection) {
console.log('connection closed');
});
});
我期待,使這項工作沒有吃所有的記憶在我的服務器上,並且可能使這個多快,但我認爲它的速度不夠快。
也許NodeJS不適合這種工作?
任何幫助表示讚賞。 謝謝。
更新2016年11月8日
下面提供的信息,我有「更新」我的代碼。問題仍然存在,我會繼續環顧四周尋找答案......但我真的沒有得到這個。
var server = require('websocket').server,
http = require('http');
var redis = require("redis"),
client = redis.createClient();
var socket = new server({
httpServer: http.createServer().listen(443),
keepalive: false
});
client.subscribe("attack-map-production");
socket.on('request', function(request) {
var connection = request.accept(null, request.origin);
client.on("message", function(channel, message){
connection.send(message);
});
connection.on('close', function(connection) {
console.log('connection closed');
});
});
更新2016年11月16日
因此,這裏是我的新代碼:
var io = require('socket.io').listen(443);
var sub = require('redis').createClient();
io.sockets.on('connection', function (sockets) {
sockets.emit('message',{Hello: 'World!'});
sub.subscribe('attack-map-production'); // Could be any patterni
sockets.on('disconnect', function() {
sub.unsubscribe('attack-map-production');
});
});
sub.on('message', function(channel, message) {
io.sockets.json.send(message);
});
即使這樣的代碼,使得去的NodeJS在100%的CPU,甚至更多,而且它開始變得非常緩慢,直到一切都停止。
我的數據的完整流程是一個python腳本將數據推送到Redis,並且通過我的訂閱,它通過webSocket和Socket.io將我的數據推送回瀏覽器。
那麼簡單,這怎麼會慢呢?我只是不明白。
感謝您的意見,我會檢查這一點,如果它有效,請回復您。 – user1861854