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で行くと、さらに、それになりすべてがちょうど止まるまで、本当に遅くなり始める。
私のデータの完全な流れは、PythonスクリプトがRedisにデータをプッシュし、サブスクリプションを通してwebSocketとSocket.ioによってデータをブラウザにプッシュバックすることです。
これは簡単ですが、どうすればこれが遅くなるのですか?私はそれを得ていない。
あなたのご意見ありがとうございます。私はこれをチェックして、動作していればご返信いたします。 – user1861854