带有 NodeJS 订阅者的 ZMQ 发布者服务器

ZMQ publisher server with NodeJS subscriber

我想要做的是拥有一个具有发布者角色的 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 的教程?我只能找到在通信双方使用相同技术的示例。

Q : Any ideas what I am doing wrong?

ZeroMQ SUB-archetype 什么都不接收,除非它明确订阅了一些“Topic”(“”-对于“一切”都是合法的)或者它在 PUB-side 和 [= 上设置了这种主题过滤配置的镜像逻辑10=]-side,给定一个 ZMQ_INVERT_MATCHING-flag 自我解释这样的订阅将如何开始工作。

...was able to get nodeJS server + nodejs client examples working ... no chance ... no no
kein moeglichkeit - nein nein ...

提示:您的代码没有任何必须的订阅设置。 SUB-原型默认状态是什么都没有订阅,所以代码无法正常工作。


Q : but I am not able to connect it using C++

嗯,在有人声称 C++ 存在问题之前/API,最好测试并记录所有此类潜在的错误状态:

MCVE 公式化问题必须可重新测试,否则 Stack Overflow 中不存在该问题。

ZeroMQ 拥有精心设计的错误报告工具,因此在每一步中,都可以读取错误状态并根据收到的详细原因报告错误状态:{ EINVAL | ETERM | ENOTSOCK | EINTR | ... }如 ZeroMQ 源中所定义(并在 ZeroMQ API 文档中有详细记录,逐个版本)。