我如何使用 ZeroMQ 实现多个套接字?
How do I implement multiple sockets with 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;
但我希望能够创建多个套接字,而不仅仅是一个。这是怎么做到的?我还需要多个上下文吗?我的意思是每个套接字都有一个上下文。
Do I also need multiple contexts?
不,你不需要。
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 线程数 and/or 根据需要微调它的其他配置细节,如果需要,甚至可以将处理工作负载拆分到多个 Context()
-实例中。
我有这个实现来创建套接字:
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;
但我希望能够创建多个套接字,而不仅仅是一个。这是怎么做到的?我还需要多个上下文吗?我的意思是每个套接字都有一个上下文。
Do I also need multiple contexts?
不,你不需要。
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 线程数 and/or 根据需要微调它的其他配置细节,如果需要,甚至可以将处理工作负载拆分到多个 Context()
-实例中。