gpt4 book ai didi

c - ZeroMQ:异步回复

转载 作者:太空狗 更新时间:2023-10-29 17:13:21 24 4
gpt4 key购买 nike

我正在构建一个基础设施(用 C 语言),其中几个独立的服务通过 ZeroMQ 进行通信。现在,为了让这一切运行得又快又顺,我希望 ZeroMQ 异步运行。
我知道 ZeroMQ 的 IO-thread 已经是分离的,但是我想同时执行多个任务。

目前,我的模式是这样的:

Client -> REQ     |  /\
Router -> ROUTER | |
--- proxy --- | |
Dealer -> DEALER | |
Workers-> REP \/--|

但是,这需要我设计一个阻塞的、同步的 worker。使这种异步的唯一方法是增加工作人员(线程)的数量,但这对我来说似乎不太可扩展。

此外,worker 执行的任务本身是异步的(使用它们自己的事件循环)。所以基本上,我希望实现这样的目标:

void *socket = zmq_socket(context, ZMQ_REP);
zsocket_connect(socket, "inproc://backend");

while (1) {
zmq_msg_t request;
zmq_msg_init(&request);
zmq_msg_recv(&request, socket, 0);
zmq_msg_close(&request);

do_something(callback, socket);
}

do_something 然后会执行一些操作,当它完成时,回调函数被调用。

void callback(void *data, void *socket) {
zmq_msg_t reply;
zmq_msg_init_size(&reply, 5);
memcpy(zmq_msg_data(&reply), "World", 5);
zmq_msg_send(&reply, socket, 0);
zmq_msg_close(&reply);
}

现在,有什么方法可以实现这一点(即组合两个事件循环)?

我已经研究过 DEALER (client) -> ROUTER -> DEALER -> DEALER (worker),但这似乎也不起作用,因为它仍然会阻止 worker 端的并发任务。

最佳答案

(客户)经销商<->路由器|<->|路由器 <-> 经销商( worker )在这种连接模式中,没有任何东西会阻塞,因此您可以根据需要交错接收和发送。

关于c - ZeroMQ:异步回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15316765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com