首页 > 解决方案 > 在跨平台桌面/移动应用程序套件中使用 ZeroMQ 解决架构问题

问题描述

我需要对跨平台应用程序套件做出架构决策。我基本上想尝试解耦模块的新方法并使用 ZeroMQ 实现网络 I/O,因为我知道它是用于进程内、进程间和网络应用程序的消息队列。但我不确定它如何适合我的情况。

如果有人能在我下周阅读他们有趣的书之前澄清一些事情,我将不胜感激:http: //zguide.zeromq.org/page :all

我已经检查了这些问题,但没有得到我的答案:

我的要求:

老路

至于桌面后端(控制台应用程序),几年前,我的第一步是编写基于观察者/命令模式的多线程架构:

然后我需要实现线程安全的消息队列,并且不可避免地会在调度程序和一堆命令类之间产生耦合,这些命令类本质上只是这些执行程序行为的函数包装器。使用 C++,这将是很多样板代码。

新的验证方式

但现在是 2019 年,所以我预计手写代码会减少,并会尝试一些新的东西。对于 ZeroMQ,我很想看看我的期望是否成立。我想要 ...

我的期望合理吗?

标签: c++networkingarchitecturezeromqdecoupling

解决方案


如果是 ZeroMQ 领域的新手,请随时查看内容,并在深入了解更多细节之前,最好先了解一下“ZeroMQ原则在不到五秒内


上面提到的帖子提出了一个假设,即:

ZeroMQ 基于这样一个假设,while (1) ...即它被插入到一个循环中

完全错误并误导任何架构规划/评估工作。

ZeroMQ 是一个功能丰富的信令/消息元平面,旨在为应用程序级代码提供大量服务,可以轻量重用智能、复杂的低级、高效处理信令/消息传递基础设施,用于进程内、进程间和节点间多代理分布式方式,为此目标使用许多已经可用的传输类协议:

{ inproc:// | ipc:// | tipc:// | vmci:// | tcp:// | pgm:// | epgm:// | udp:// }


这就是说,让我们关注您的购物清单:

我的要求:

  • c++ZeroMQ:[通过] Windows 和 macOS 上的桌面主机,作为单独的控制台后端和 GUI 前端;后端必须用 C++ 编写;
  • c++ZeroMQ:[通过] iOS 和 Android 上的移动客户端,后端用 C++ 编写;
  • tcpZeroMQ:[通过]使用 TCP 与移动设备对话;

我想要 ...

  • 无需从头开始编写调度程序和消息/命令队列,只需在跨线程的进程内模块之间传递 ZeroMQ 请求,因为从头开始编写调度既乏味又无效率。
  • 简化桌面设备和移动设备之间的网络 I/O 。对于这一部分,我尝试了 ASIO,它并不比原始套接字和选择方便得多,而且它仅支持 C++。
  • 使用基于 ZeroMQ 的 IPC 将 GUI 和控制台应用程序解耦,以便可以使用各种语言的不同技术重写 GUI。
  • 感知桌面和移动用户的低延迟

我的期望合理吗?

出色地 :

  • 显然没有必要从头开始编写调度程序+队列。队列管理是内置的 ZeroMQ,实际上隐藏在服务元平面内。另一方面,在多参与者之间安排事情是您的设计决策,与 ZeroMQ 或其他选择的技术无关。鉴于您的系统设计意图,您决定方式(“自动生成的魔法”仍然比任何近期的系统设计现实更多的是一厢情愿)

[通过] 队列:内置 ZeroMQ
[NICE2HAVE] 调度程序:为任何通用分布式多代理范围的生态系统自动生成(然而,在不久的将来很难期待)

  • 网络(以及原则上的任何)I/O 已经在 ZeroMQ 服务层次结构中进行了简化

[通过]简化的网络 I/O - ZeroMQ 已经提供了所有抽象的传输类相关服务,这些服务隐藏在信令/消息元平面的透明使用中,
因此应用程序代码喜欢只是{ .send() | .poll() | .recv() }

[通过]:将 GUI 与ParcPlace -Systems-pioneered-MVC 架构的任何其他部分分离。从ZeroMQ v2.11 开始使用它作为 TCP/IP 网络上的(远)远程键盘,甚至可以集成到基于角色的 GUI 中,例如 Tkinter-GUI 角色可以很好地服务于这个分布式的本地-可视/远程-分布式-C控制器/远程分布式模型。如果移动终端 O/S 对本地视觉 MVC 组件引入了更复杂的约束,则应由领域专家就该特定 O/S 属性验证适当的适应到目前为止,ZeroMQ 信令/消息传递元平面尚未被认为包含任何约束本身。

[通过]延迟- ZeroMQ 从一开始就设计为必须提供最终的低延迟。鉴于它可以为 HFT 交易生态系统提供服务,桌面/移动系统在所有访问的传输 + O/S 处理延迟的 E2E 一次性累积的意义上的限制要小几个数量级。


推荐阅读