node と zmq を使用した基本的な pubsub アプリケーションに奇妙な問題があります。
クライアントがブローカに文字列を発行している場合、問題はブローカが最初の行しか受信しないことです。ネットワーク レベルでは、最初のメッセージのみが送信され、次の .send() 関数の呼び出しは効果がない (パケットは送信されない) ことに気付いたので、問題はクライアント/パブリッシャーにあると思います。私は完全に機能する公式ガイドで提供されているサンプル コードを使用しました。私のコードの唯一の違いは、再利用可能な構造を持つためにプロトタイプを使用していることです。(関係がないため、サブスクライバーのコードを貼り付けませんでした。他の関係のないものを取り出しました)
クライアント/パブリッシャーの関連部分:
Publisher = function(zmq, pport) {
this.logread = spawn('tail', ['-n0', '-f', '/var/log/auth.log']);
this.publisher = zmq.socket('req');
this.pport = pport;
};
Publisher.prototype.start = function() {
var self = this;
this.publisher.connect('tcp://127.0.0.1:' + this.pport);
this.logread.stdout.on('data', function(data){
self.publisher.send(data.toString());
console.log(data.toString());
});
};
ブローカーの関連部分:
Broker = function(zmq, bpport, bsport) {
this.server = zmq.socket('rep');
this.bpport = bpport;
this.bsport = bsport;
};
Broker.prototype.start = function() {
this.server.on('message', function(request) {
console.log(request.toString());
});
this.server.bind('tcp://127.0.0.1:' + this.bsport, function(err) {
if (err)
console.log(err);
});
};