3

我希望 Linux(服务器)主机上的一个应用程序与 VM 中 Win7(客户端)上的应用程序通信。选择的库是 ZeroMQ。但是如何管理异步任务呢?

让我举个例子:VM中的应用程序以任意间隔生成任务并将它们发送到Linux机器。这将处理它们,但需要一些时间来回答。此时 REQ/REP 模式中的套接字被阻塞,来自 WinApp 的传入任务无法转发到 LinuxApp。我应该如何解决这个问题?这一般是如何解决的,即使没有 0MQ。我是否必须同时连接服务器和客户端并建立两个连接?

要求:

  • 客户端是一个独特的任务生成器。
  • 服务器为每个连接的客户端创建一个工作线程。
  • 服务器在客户端和工作线程之间建立唯一的连接。(一些隧道)
  • ->(每个客户端-工作线程对在一个套接字上的请求/请求)
  • 服务器必须立即转发传入的任务。
  • 服务器必须能够处理多个客户端(因此连接到 WT)。

因此,它不可能实现 REQ/REP/REQ/REP/... 序列。

4

3 回答 3

4

查看ZMQ 指南中描述的几种模式,看看其中一种是否比简单更适合REQ/REP

一般来说,您在 linux 机器上的服务器似乎需要实现ROUTER/DEALER将传入任务转发给一组工作人员的模式。

与传统的基于套接字的客户端/服务器解决方案相比,ZMQ 有自己的拓扑结构。其他解决方案可能是实现基于套接字的服务器,该服务器使用线程池转发传入任务。

更新: 由于您一直在精确满足您的要求,我认为majordomo 模式可能是您的目的的一个良好且可靠的起点。正如@gvd 在他的评论中提到的那样,可能会有更好的拟合模式。

于 2012-11-06T20:15:16.887 回答
3

正如 DevNoob 所说,异步客户端服务器模式听起来像是您需要的模式。

“LRU”表示最近最少使用,但我已从指南的最新文本中删除了该术语,并改用“负载平衡”。由于目标是在一组工作人员之间进行负载平衡......

于 2012-11-10T05:07:30.477 回答
2

我知道您提到 ZMQ 作为您选择的库,但我可以谦虚地建议 Akka(www.akka.io)吗?Akka 有一个 ZQM 扩展,我们有很好的经验,因此您可以轻松地在其传输机制(基于网络)和 ZMQ 之间进行转换。它实现了 Actor 模型,更重要的是,它为跨工作 Actor 的异步处理提供了“询问”和“告诉”。在消息传递速度方面,Akka 似乎也与 ZMQ 之类的竞争相当有利,并且在我的经验中记录得更好。

Akka 没有的一件事是跨语言支持,但我们现在使用 ZMQ 扩展来实现这一点。事实证明,ZMQ 和 Akka 的结合确实是一个非常强大和灵活的平台。

于 2012-11-18T12:33:54.397 回答