【问题标题】:Node.js and zmqNode.js 和 zmq
【发布时间】:2013-06-12 16:52:09
【问题描述】:

我有一个带有 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);
    });

};

【问题讨论】:

    标签: javascript node.js zeromq


    【解决方案1】:

    您在谈论发布订阅模式,但在您的代码中,您创建了一个req 套接字,并在代理中创建了一个rep 套接字,用于请求-回复模式。请求-回复模式严格要求先发送,而不是接收,请参阅api docs 文档,或从guide 阅读更多内容

    我想您应该在客户端使用pub 套接字,在另一侧使用sub 套接字,但不知道您想要实现什么,也许不同的模式会更好地满足您的需求。

    【讨论】:

      【解决方案2】:

      所以我会回答我的问题: 服务器必须向客户端发送回复,在此之前客户端不会发送更多消息

      server.send('OK');
      

      我也认为有不同的方法来实现这一点

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-18
        • 1970-01-01
        相关资源
        最近更新 更多