次の問題で輪になっていきます.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 呼び出しで順番にソケットを異なるポートにバインドすることで、当面は機能していますが、それが最善の方法ではないことは確かです。より良い解決策が見つかった場合、または他の誰かが教えてください。