【问题标题】:Async Client in ZeroMQZeroMQ 中的异步客户端
【发布时间】:2016-08-13 17:24:33
【问题描述】:

http://zguide.zeromq.org/page:all#toc76的图:

据我了解,ROUTER 需要经常轮询以听取每个客户的意见。

然后,ROUTER 将任何客户端消息转发给 DEALER。

问题一:ROUTER 到 DEALER 的连接是异步的吗?

问题 2:对于服务器的 DEALER 到 N 个 DEALER Worker,是否必须在服务器的 DEALER 进行轮询?

看书的文字:

客户端每秒发送一次请求,并得到零个或多个回复。

问题 3:我想 0 来自死亡的 Worker,即盒子/线程崩溃?多于 1 条回复怎么会返回给 -Client?

问题 4:DEALER 到 DEALER 的通信是否同步?

【问题讨论】:

  • 为什么投了反对票?

标签: zeromq


【解决方案1】:

Q1:没有连接,它的代码,类似:

while(router.receive(x))
{
    dealer.send(x)
}

注意:不是真正的代码,需要处理路由信息和标记结束帧等。

Q2:是的,假设您的员工响应请求。如果工作人员正在发送回复并且您没有在服务器的经销商处进行轮询,那么工作人员最终会在他们达到排队消息的“高水位线”时阻塞。

Q3:取决于用例。 Dealer/Router 套接字没有发送/接收消息数量的条件(不像 REQ/REP 是 1:1)。例如,如果工作人员完成的任务可能需要很长时间,您可能希望发送中间“x% 完成”消息。

Q4:请参阅 Q3 的答案,我会补充:取决于您是否愿意。套接字不强制它,您可以将其编码为同步或异步。

【讨论】:

  • 每 #2 听起来像是 DEALER 到 N DEALER 需要轮询。 DEALER to DEALER(即一对一)呢?
  • 如果您将其视为经销商之间的同步连接(即 1:1 sent:received 消息),那么您可以在每次发送后调用 receive。否则你可能需要投票。
  • 其实,Server 的ROUTER 是如何轮询DEALER 客户端的呢?到目前为止,我只看到了端口轮询,而不是单独的客户端(连接到同一个绑定端口)?
  • 就像它只有一个客户端一样。路由器上收到的消息将显示为单个消息流,您收到的第一帧会告诉您它来自哪个经销商。
猜你喜欢
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
相关资源
最近更新 更多