c - 如何使用ZeroMQ实现多个套接字?

标签 c sockets c++11 zeromq

我有这个实现来创建一个套接字:

if (gctx == nullptr)
    {
        gctx = zmq_ctx_new();
        gsock = zmq_socket(gctx, ZMQ_REQ);
    }

    snprintf(url, sizeof(url), "wsd:///tmp/hfg/%s", name);
    int rc = zmq_connect(gsock, url);
    if (rc != 0)
        printf("error connect %s: %s\n", url, zmq_strerror(zmq_errno()));

    return rc;

但是我希望能够创建多个套接字,而不仅仅是一个。这是怎么做的?我还需要多个上下文吗?我的意思是为每个套接字一个上下文。

最佳答案

Q : " Do I also need multiple contexts? "



不,您不需要。

如果您从未使用过ZeroMQ,可以在深入了解更多细节之前先浏览"ZeroMQ: Principles in less than Five Seconds"

Q : " How is this done? "


gSock1 = zmq_socket( gCTX, ZMQ_REQ ); // 1st REQ-uester
gSock2 = zmq_socket( gCTX, ZMQ_REQ ); // 2nd
gSock3 = zmq_socket( gCTX, ZMQ_PUB ); // 1st PUB-lisher
gSock4 = zmq_socket( gCTX, ZMQ_PUB ); // 1st PUB-lisher

只需分配所需的Socket() -class实例(或zmq_socket()调用)一样简单。默认的 Context() -instance(主要的消息传递处理引擎)可能会保持“共享”状态,或者可能会增加IO线程的数量(如果需要)和/或根据需要对其其他配置详细信息进行微调,甚至拆分处理如果需要,可以在几个Context() -instances之间进行工作负载。

关于c - 如何使用ZeroMQ实现多个套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62384729/

相关文章:

c - 字符串文字是否保证在内存中彼此相邻?

c - 为什么信号处理程序仅适用于我的第一个 ctrl + c?

c++ - poll with recv、epoll with recv 和 simple recv 之间的性能差异?

c - Perl TCP 套接字编程 vs C recv() 函数。我需要跟踪收到的字节数吗?

c++ - 无法将 std::set_intersection 应用于具有公共(public)字段的不同类型的结构

c - 使用 setfillpattern() 时出现 "Type mismatch in parameter"?

C++跨平台网络摄像头通过套接字流式传输

c++ - 我可以在 c++17 代码中使用用 c++11 开发的库吗?

c++ - 自定义 Stringstream - 将 std::wstring 转换为 std::string

c - 如何在 Asterisk 中将 PostgreSQL 数据库时间戳更新为空?