У меня есть NodeJS, на котором размещен сервер WebSocket. WebSocket перераспределяет сообщение от Redis.Управление памятью NodeJS + Redis + WebSocket?
Полная строка: у меня есть некоторый скрипт python, который подталкивает некоторые данные в Redis, и после этого NodeJS является WebSocket, который считывает новые входные данные Redis подключенным клиентам. Моя проблема в том, что 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-08
С информацией, представленной ниже, я «обновленный» мой код. Проблема все еще есть, я буду продолжать искать, чтобы найти ответ ... но я действительно не понимаю этого.
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