sql >> データベース >  >> NoSQL >> Redis

最も効率的なnode.jsプロセス間通信ライブラリ/メソッドは何ですか?

    あるマシンから別のマシンにメッセージを送信し、コールバックを気にしない場合は、Redis pub/subが最適なソリューションです。実装は非常に簡単で、Redisは非常に高速です。

    まず、マシンの1つにRedisをインストールする必要があります。

    Redisへの接続は本当に簡単です:

    var client = require('redis').createClient(redis_port, redis_host);
    

    ただし、ファイアウォールでRedisポートを開くことを忘れないでください!

    次に、各マシンをいくつかのチャネルにサブスクライブする必要があります:

    client.on('ready', function() {
      return client.subscribe('your_namespace:machine_name');
    });
    
    client.on('message', function(channel, json_message) {
      var message;
      message = JSON.parse(message);
      // do whatever you vant with the message
    });
    

    your_namespaceはスキップできます グローバル名前空間を使用しますが、遅かれ早かれ後悔するでしょう。

    メッセージの送信もとても簡単です:

    var send_message = function(machine_name, message) {
      return client.publish("your_namespace:" + machine_name, JSON.stringify(message));
    };
    

    さまざまな種類のメッセージを送信する場合は、メッセージの代わりにpmessagesを使用できます。

    client.on('ready', function() {
      return client.psubscribe('your_namespace:machine_name:*');
    });
    
    client.on('pmessage', function(pattern, channel, json_message) {
      // pattern === 'your_namespace:machine_name:*'
      // channel === 'your_namespace:machine_name:'+message_type
      var message = JSON.parse(message);
      var message_type = channel.split(':')[2];
      // do whatever you want with the message and message_type
    });
    
    send_message = function(machine_name, message_type, message) {
      return client.publish([
        'your_namespace',
        machine_name,
        message_type
      ].join(':'), JSON.stringify(message));
    };
    

    ベストプラクティスは、プロセス(またはマシン)に機能(例:'send_email')で名前を付けることです。 )。その場合、プロセス(またはマシン)が複数の機能を実装している場合は、複数のチャネルにサブスクライブされる可能性があります。

    実際には、redisを使用して双方向通信を構築することは可能です。ただし、コンテキストを失うことなくコールバックを受信するには、各メッセージに一意のコールバックチャネル名を追加する必要があるため、より注意が必要です。

    したがって、私の結論は次のとおりです。「送信して忘れる」通信が必要な場合はRedisを使用し、本格的な双方向通信が必要な場合は別のソリューションを調査します



    1. MongoDB集約フレームワークで中央値を計算します

    2. RedisSYNCおよびEXEC

    3. mongoDBの文字列フィールド値の長さ

    4. redisスレーブのinfoコマンドによってリストされた期限切れのキーの数が私が見ているものと一致していません