Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js和zmq_Javascript_Node.js_Zeromq - Fatal编程技术网

Javascript Node.js和zmq

Javascript Node.js和zmq,javascript,node.js,zeromq,Javascript,Node.js,Zeromq,我对带有node和zmq的基本pubsub应用程序有一个奇怪的问题: 客户端向代理发布字符串,问题是代理只接收第一行。在网络级别,我注意到只有第一条消息被发送,然后对.send()函数的下一次调用没有效果(没有发送数据包),因此我认为问题出在客户机/发布服务器上。 我使用了官方指南中提供的示例代码,该代码工作得非常完美,唯一的区别是我使用prototype来拥有一个可重用的结构。 (我没有粘贴订阅者的代码,因为它不相关,并取出了一些其他不相关的东西) 客户/出版商的相关部分: Publisher

我对带有node和zmq的基本pubsub应用程序有一个奇怪的问题:

客户端向代理发布字符串,问题是代理只接收第一行。在网络级别,我注意到只有第一条消息被发送,然后对.send()函数的下一次调用没有效果(没有发送数据包),因此我认为问题出在客户机/发布服务器上。 我使用了官方指南中提供的示例代码,该代码工作得非常完美,唯一的区别是我使用prototype来拥有一个可重用的结构。 (我没有粘贴订阅者的代码,因为它不相关,并取出了一些其他不相关的东西)

客户/出版商的相关部分:

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

};

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

server.send('OK');

我还假设有一种不同的方法来实现这个

您正在谈论发布-订阅模式,但是在您的代码中,您创建了一个
req
套接字,并在代理中创建了一个
rep
套接字,用于请求-应答模式。请求-回复模式严格要求先发送,然后接收,查看文档,或者从文档中读取更多内容

我想您应该在客户端使用
pub
socket,在另一端使用
sub
socket,但不知道您想要实现什么,也许不同的模式更适合您的需要