2

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

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

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

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

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

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

谢谢

4

2 回答 2

1

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

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

于 2013-04-29T10:17:56.610 回答
0

完全异步的方法如下。

客户端

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

当您发送请求时,发送(k, v)wherek是唯一的(在此客户端的上下文中)请求键,并且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 多部分消息和括号来表示元组。

于 2013-04-29T15:19:35.720 回答