我想实现一个类似于ZeroMQ zguide中的Request-Reply Broker的设计,但我不想让多个工作线程提前运行,而是让一个工作线程接收所有请求,并产生异步操作(任务)来处理他们并发送响应。
实现此目的的套接字类型的正确组合是什么?
我想实现一个类似于ZeroMQ zguide中的Request-Reply Broker的设计,但我不想让多个工作线程提前运行,而是让一个工作线程接收所有请求,并产生异步操作(任务)来处理他们并发送响应。
实现此目的的套接字类型的正确组合是什么?
您可能需要仅使用一名工作人员来实施负载平衡消息代理。该模式在指南中进行了描述,字面意思是:
“该经纪人执行以下操作:
如果您只有一个工作人员,则所有请求都保留在队列中并以 FIFO 方式处理。
我使用以下套接字类型组合实现了这一点:
要求:
客户端 DEALER --> 服务器路由器 --> 请求处理程序(生成)
回复:
客户端 DEALER <-- 服务器路由器 <-- 服务器 DEALER <-- 请求处理程序 DEALER
DEALER
请求处理程序通过一个套接字将回复返回给服务器inproc
DEALER
套接字接收来自请求处理程序的回复inproc
ROUTER
服务器通过tcp 端口上的套接字向客户端发送回复DEALER
客户端通过tcp 端口上的套接字接收回复我在这里发布了示例: https ://github.com/imatix/zguide/blob/master/examples/Python/asyncrrhandlers.py
听起来好像一直只有一个发布者和一个接收者——在这种情况下,请求/接收是最简单的。然而,转向发布/订阅模式并拥有多个接收器,将允许您在需要时进行水平扩展。