【问题标题】:Bidirectional Communication Async with ZeroMQZeroMQ 双向通信异步
【发布时间】:2018-08-03 03:10:08
【问题描述】:

我了解different socket and patterns types,因为我有兴趣让多个客户端以协作的方式相互交谈,可能有一个服务器代理或中间件。这对于接收和转发相关实体之间的消息很有用。

我的学习/情况案例如下: 我想通过图表中的步骤编号交互来表示工作流程。我希望不要对我的图表造成不便,我只是参考它来更好地说明我的情况

在两个客户端节点之间实现双向、异步消息以交换消息的合适模式是什么?

因为所有这些......我一直在阅读 ZMQ_ROUTERZMQ_DEALER 套接字,它们似乎是一个不错的选择,因为正在进行和传入的路由策略。

我了解从所有连接的对等方(ZMQ_DEALER)接收的每条消息排队的过程,并且发送的每条消息在所有连接的对等方之间循环

在这种情况下轮询是什么意思?

ZMQ_ROUTER 在传入路由策略方面发生了类似的事情......

我一直在测试Shared Queue Dealer and Router sockets samples,但该过程是同步的,因为我在REQ-ROUTER-DEALER-REP 设置中使用了它,但在这种情况下,REQ -> ROUTER 发送不针对另一侧的特定处理程序,它只是转到任意一个,ROUTER 确保回复返回给原始发件人。

我认为我的情况与 zeromq 邮件列表中的to this Jake's question 类似

经纪人的做法ROUTER-DEALER...是不是想对了? 或者通信可能是客户直接对客户?

我要求所有这些都是为了分享我的考虑,并了解和接受你们 ZMQ 人员关于在两个客户端节点之间实现双向、异步消息的适当模式的一些方向。

【问题讨论】:

  • 检查 c++ 中的 boost asio 聊天服务器示例。它支持多个客户端,也可以在双工模式下工作

标签: python c++ sockets client-server zeromq


【解决方案1】:

在您的服务器代码上,您希望将zmq_routerbind 运行到一个众所周知的端口。

然后,每个客户端应用程序应创建一个zmq_dealer 套接字和connect 到路由器绑定到的 ip 和端口。在连接之前,您可能希望在套接字上设置一个可用于识别每个客户端的 id。

为了确保客户端将消息发送到正确的位置,我们需要附加他们希望与之交谈的客户端的 ID 作为第一个消息部分,以允许它通过路由器路由到正确的客户端。

只有在每个dealer 套接字进行多次连接(即直接连接到其他客户端经销商套接字)时,您才会遇到循环法问题。

【讨论】:

  • 这有点像第一个数字Asynchronous Client/Server ?我的服务器只会 bind() 到单个已知端口,并且只有该端口会链接到不同的 N 个现有客户端?
  • 我一直在阅读您的建议,我发现了这个The DEALER to ROUTER Combination 在我的情况下,我是否可能需要在每个客户端中模拟或实施 REQ/REP?我还没有清除这个...
  • 异步客户端/服务器就是您要寻找的。绑定到单个已知端口,然后将所有客户端仅连接到服务器上的该端口。然后使用客户端 ID 在不同客户端之间异步发送消息。
  • @bgarcial 如果您需要额外的性能,它可以是。我之前成功地使用了 Dealer->Router->Dealer 模式,而无需任何额外的工作套接字。
  • 查看多部分消息 - zguide.zeromq.org/php:chapter2#toc9
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 2011-11-09
  • 2013-02-25
  • 1970-01-01
相关资源
最近更新 更多