0

次の問題で輪になっていきます.zmq関連のコードを別のモジュールに分離したい.www.jsファイルで以下のようなクラスターでエクスプレスアプリを開始しました.

 if (cluster.isMaster) {
    for (; i < cpuLength; i++) {
      spawn();
    }
}

私のzmq.jsファイルで、プッシュソケットを作成したいのですが、それを1つのポートにバインドすることはできません..それはbind not connectであるため、最初のクラスターフォークの後にエラーが発生します。

ソケットコードを www.js ファイルに移動できますが、ソケットを使用する必要があるときはいつでも www ファイルを要求する必要があります。すべての zmq 関連のものを別のファイルに保存したい。それを機能させる方法はありますか?

より詳しい情報。ソケットで bind を 1 回だけ呼び出し、ソケットをモジュール/グローバル スコープに保持しようとしました。それを使用してメッセージを送信すると、エラーは発生しませんが、プル ソケットでメッセージを受信しません。送信時に受け取るメッセージは、bind を呼び出したプロセスに対するものだけです。プロセスの残りの部分では、ソケットは null ではありませんが、何もしていないようです。

www.js

function startServer() {
  if (cluster.isMaster) {
    for (; i < cpuLength; i++) {
       cluster.fork();
    }
    cluster.on('online', function (worker) {
      log.debug('Worker ' + worker.process.pid + ' is online.');
    });
  } else {
    log.info('Starting server at port ' + config.get('port'));
    app.listen(config.get('port'));
  }
}

zm.js

if (cluster.isMaster) {
  var p = ip + port;
  socket.bind(p, function (err) {
    if (!err) {
      bunyan.info('ZMQ bound ', process.pid);
      bunyan.info('ZMQ bound to port', p);
    } 
  });
} 

バインディング マスターまたはフォーク プロセスで試しましたが、どれも機能していないようです。

更新: 各 fork 呼び出しで順番にソケットを異なるポートにバインドすることで、当面は機能していますが、それが最善の方法ではないことは確かです。より良い解決策が見つかった場合、または他の誰かが教えてください。

4

0 に答える 0