Design patterns ZeroMQ:UI、服务器和异构工作人员之间的命令响应和状态回调

Design patterns ZeroMQ:UI、服务器和异构工作人员之间的命令响应和状态回调,design-patterns,asynchronous,architecture,zeromq,server,Design Patterns,Asynchronous,Architecture,Zeromq,Server,我正在尝试设置一组程序,包括: 一个用户界面(或者多个用户界面) “服务器” 一些“工人” UI是用户与系统交互的方式,服务器进行处理和编组,工作人员处理各种硬件设备。此外,这些元素的任何数量可能在不同的平台(C、C++、java、Python是目前的主要)和不同的物理机器上。worker是不可交换的-服务器根据worker告诉它自己的信息知道哪个可以做什么 例如,想象工人可以煮咖啡,类似这样: 工人A对服务员说:“嗨,我是一台咖啡机,我准备好了” 服务器对用户界面:“嗨,我这里有一台咖啡

我正在尝试设置一组程序,包括:

  • 一个用户界面(或者多个用户界面)
  • “服务器”
  • 一些“工人”
UI是用户与系统交互的方式,服务器进行处理和编组,工作人员处理各种硬件设备。此外,这些元素的任何数量可能在不同的平台(C、C++、java、Python是目前的主要)和不同的物理机器上。worker是不可交换的-服务器根据worker告诉它自己的信息知道哪个可以做什么

例如,想象工人可以煮咖啡,类似这样:

  • 工人A对服务员说:“嗨,我是一台咖啡机,我准备好了”
  • 服务器对用户界面:“嗨,我这里有一台咖啡机”
  • UI到服务器(稍后):“用户现在想要一杯咖啡,因为您有一台机器”
  • 服务器对用户界面:“正在处理。您的订单号是#42”
  • 服务员对工人A说:“请喝咖啡”
  • 工作人员A到服务器:“马上过来”
  • 工作人员A到服务器(稍后):“给你”
  • 服务器到用户界面:“咖啡订单#42给你!”
我并不期望有大量的流量——最坏的情况可能是每秒几百个数据包,而且通常要少得多。每个程序内的线程不是问题,除非通信套接字都被捆绑起来等待响应

我计划使用ZeroMQ来组织所有这些,我有一个基本的REQ-REQ锁步,在服务器和工作程序之间,以及在UI和服务器之间工作。然而,当一个硬件设备可能需要很长时间才能完成要求它完成的任务时,这种同步性似乎并不好用

它似乎也不允许我做一些事情,比如让服务器通知UI有关更改,让工作人员通知服务器有关其状态更改,而无需在每个链接上设置第二个端口

ZeroMQ(或者其他MQ)有办法处理这种设置吗