WebSocket Server를 호스팅하는 NodeJS가 있습니다. WebSocket은 Redis에서 메시지를 재배포합니다.NodeJS + Redis + WebSocket 메모리 관리?
전체 라인은 Redis에서 일부 데이터를 푸시하는 Python 스크립트가 있고 NodeJS가 연결된 클라이언트에 Redis 새로 입력 된 데이터를 읽는 WebSocket입니다. 내 문제는 NodeJ가 항상 메모리를 차지하고 잠시 후에 그냥 버스트하고 중지한다는 것입니다.
제 코드가 꽤 간단하기 때문에 제 문제는 무엇인지 모르겠습니다.
연결된 클라이언트에서 메시지를 받기 위해 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에 가서하게하고, 모든 것이 멈출 때까지 정말로 느리게 시작됩니다.
내 데이터의 흐름은 파이썬 스크립트가 데이터를 Redis로 푸시하고 내 구독을 통해 webSocket 및 Socket.io를 통해 내 데이터를 브라우저로 다시 푸시하는 것입니다.
간단합니다. 어떻게 느려질 수 있습니까? 나는 단지 그것을 얻지 않는다.
입력 해 주셔서 감사합니다. 작동 여부를 확인한 후 다시 연락 드리겠습니다. – user1861854