具有NodeJS订阅服务器的ZMQ发布服务器

时间:2019-09-13 14:49:08

标签: c++ node.js zeromq

我想做的是拥有一个具有发布者角色的C ++ ZeroMQ服务器并连接NodeJS订阅者客户端。

我能够使nodeJS服务器+ nodejs客户端示例正常工作,但无法使用C ++进行连接。

C ++代码:

#include "zmq.hpp"

//  Convert string to 0MQ string and send to socket
auto s_send(zmq::socket_t & socket, const std::string & string) {    
    zmq::message_t message(string.size());
    memcpy(message.data(), string.data(), string.size());

    return socket.send(message, zmq::send_flags::none); 
}

int main() {
    std::cout << "Hello World!\n"; 

    zmq::context_t ctx(1);
    zmq::socket_t sock(ctx, ZMQ_PUB);
    sock.bind("tcp://*:5555");

    Sleep(1000);

    while (true) { 
        s_send(sock, "Hello from the publisher.");
        Sleep(1000);
    }
}

NodeJS代码:

var zmq = require('zeromq');
var sock = zmq.socket('sub');

sock.connect("tcp://127.0.0.1:5555");
console.log("Subscriber connected to port 5555");

sock.on('message', function(msg){
    console.log('work: %s', msg.toString());
});

有什么主意我做错了吗?是否有关于互连来自不同语言的ZeroMQ的教程?我只能在通讯的两端找到使用相同技术的示例。

1 个答案:

答案 0 :(得分:0)

  

Q 有什么想法我做错了吗?

ZeroMQ SUB -原型不会收到任何东西,除非它明确地订阅了某些“ 主题”(“”-合法代表“一切” ),或者在 PUB 端和 SUB 端都设置了此类主题过滤配置的镜像逻辑 ZMQ_INVERT_MATCHING -标志自我说明了此类订阅将如何开始工作。

  

...能够使nodeJS服务器+ nodejs客户端示例正常工作 ......没有机会...没有no
kein moeglichkeit-nein nein。 ..

提示:您的代码都不执行任何必需的订阅设置。 SUB -原型默认状态实际上没有订阅任何内容,因此代码无法正常运行 abraca dabra nepla ...这里没有任何魔力...


  

Q 但是我无法使用C ++将其连接

好吧,在有人声称C ++ / API有问题之前,最好先测试并记录所有这些潜在的错误状态:

MCVE提出的问题必须可以重新测试,否则该问题在StackOverflow中不存在。

ZeroMQ具有完善的错误报告工具,因此在每个步骤中,您都可以读取错误状态并根据收到的进入任何已定义错误状态的详细原因进行报告:{ EINVAL | ETERM | ENOTSOCK | EINTR | ... }在ZeroMQ来源中(并且在ZeroMQ API文档中有详细记录,逐个版本)。