0

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);
    });

};
4

2 に答える 2

1

パブリッシュ サブスクライブ パターンについて話していますが、コードではreqソケットを作成し、ブローカーでrepはリクエスト/リプライ パターン用のソケットを作成します。要求と応答のパターンは、受信よりも最初に送信する必要があります。API ドキュメントドキュメントを参照するか、ガイドから詳細を参照してください。

pubクライアント側でソケットを使用し、反対側でソケットを使用する必要があると思いますがsub、何を達成したいのかわからない場合は、別のパターンの方がニーズに適している可能性があります。

于 2013-06-12T08:52:09.647 に答える
0

だから私は私の質問に答えます: サーバーはクライアントに返信を送信する必要があり、それまでクライアントはそれ以上メッセージを送信しません

server.send('OK');

また、これを達成する別の方法があると思います

于 2013-06-11T22:06:50.810 に答える