1

我想实现一个类似于ZeroMQ zguide中的Request-Reply Broker的设计,但我不想让多个工作线程提前运行,而是让一个工作线程接收所有请求,并产生异步操作(任务)来处理他们并发送响应。

实现此目的的套接字类型的正确组合是什么?

4

3 回答 3

1

您可能需要仅使用一名工作人员来实施负载平衡消息代理。该模式在指南中进行了描述,字面意思是:

“该经纪人执行以下操作:

  • 接受来自一组客户端的连接。
  • 接受来自一组工作人员的连接。
  • 接受来自客户端的请求并将这些请求保存在一个队列中。
  • 使用负载平衡模式将这些请求发送给工作人员。
  • 收到工人的回复。
  • 将这些回复发送回最初的请求客户端。"

如果您只有一个工作人员,则所有请求都保留在队列中并以 FIFO 方式处理。

于 2013-11-07T15:23:48.953 回答
1

我使用以下套接字类型组合实现了这一点:

要求:

客户端 DEALER --> 服务器路由器 --> 请求处理程序(生成)

  1. 客户端通过端口上的 DEALER 套接字发送请求
  2. 服务器通过端口上的 ROUTER 套接字接收请求
  3. 服务器在生成请求处理程序时将请求和客户端身份直接传递给请求处理程序

回复:

客户端 DEALER <-- 服务器路由器 <-- 服务器 DEALER <-- 请求处理程序 DEALER

  1. DEALER请求处理程序通过一个套接字将回复返回给服务器inproc
  2. 服务器通过DEALER套接字接收来自请求处理程序的回复inproc
  3. ROUTER服务器通过tcp 端口上的套接字向客户端发送回复
  4. DEALER客户端通过tcp 端口上的套接字接收回复

我在这里发布了示例: https ://github.com/imatix/zguide/blob/master/examples/Python/asyncrrhandlers.py

于 2013-11-07T20:19:42.567 回答
0

听起来好像一直只有一个发布者和一个接收者——在这种情况下,请求/接收是最简单的。然而,转向发布/订阅模式并拥有多个接收器,将允许您在需要时进行水平扩展。

于 2013-11-06T23:01:16.057 回答