【问题标题】:ZeroMQ pattern queryZeroMQ 模式查询
【发布时间】:2013-04-29 10:06:52
【问题描述】:

我想使用 ZeroMQ (http://zeromq.org/) 在 C++ 中实现服务器/客户端交互。

我的要求是实现一个功能,如果客户端向服务器发送请求,服务器应该将多条数据(按顺序)发送回客户端。客户端应该能够重复发送请求,服务器在每个请求上回复多条数据。

ZeroMQ 规定了 req-res、pub-sub、push-pull 等模型,但这不支持我的要求,因为:

1) Req-rep 模式总是期望返回消息,即它被设计为发送和接收的组合

2) pub-sub 和 push-pull 是单向的

哪种 ZeroMQ 模式更适合我的要求,以及哪种协议更适合 TCP、PGM、EPGM 等......!

谢谢

【问题讨论】:

    标签: c++ client zeromq


    【解决方案1】:

    看看 ZMQ 经销商-路由器架构: http://www.zeromq.org/tutorials:dealer-and-router

    您应该能够处理特定的客户,而不必遵守严格的请求回复类型消息流。

    【讨论】:

      【解决方案2】:

      一个完全异步的方法如下。

      客户端

      让您的客户使用 DEALER 套接字。连接到您的服务器 ROUTER。

      发送请求时,发送(k, v),其中k 是唯一的(在此客户端的上下文中)请求键,v 是您正在执行的任何操作的实际请求数据。

      在同一个 DEALER 套接字上侦听传入消息。期待一系列消息,如下所示:

      • (k, START)
      • (k, (0, 10), A[0..9])
      • (k, (10, 8), A[10..17])
      • (k, (18, 2), A[18..19])
      • (k, END)

      服务器端

      让您的服务器使用 ROUTER 套接字。绑定吧。

      侦听[sender, (k, v)] 形式的传入消息。

      发回一系列类似于以下内容的消息:

      • [sender, (k, START)]
      • [sender, (k, (0, 10), A[0..9])]
      • [sender, (k, (10, 8), A[10..17])]
      • [sender, (k, (18, 2), A[18..19])]
      • [sender, (k, END)]

      我使用方括号表示 ZMQ 多部分消息,使用括号表示元组。

      【讨论】:

      • 谢谢@Timothy Shields,如上所述,multipart 可能有用,但我们可以将它作为两种模式的组合来解决我的问题吗?例如 req-rep 和 pub-sub 或 pub-sub 和 push-pull 等!或任何其他已经存在的模式?
      • @spidey 这是一个现有的模式。这是经销商到路由器。服务器端的多部分消息不是我发明的——这就是 ROUTER 套接字的工作方式。
      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2017-02-13
      • 2019-08-29
      • 1970-01-01
      相关资源
      最近更新 更多