【发布时间】:2023-03-22 14:05:01
【问题描述】:
我正在努力解决以下问题:
我想使用 ZeroMQ 在 N 个客户端和 1 个服务器之间进行双向异步请求/回复。
这意味着任何客户端都可以向服务器发出请求,服务器必须回复客户端。
另一方面,服务器必须能够向任何已识别的客户端发出请求,并且客户端必须能够回复服务器。
我认为我必须使用路由器/经销商,但我不确定我是否需要两种方式。
此外,有没有办法让整个范例只在服务器端和每个客户端使用一个端口?
【问题讨论】:
我正在努力解决以下问题:
我想使用 ZeroMQ 在 N 个客户端和 1 个服务器之间进行双向异步请求/回复。
这意味着任何客户端都可以向服务器发出请求,服务器必须回复客户端。
另一方面,服务器必须能够向任何已识别的客户端发出请求,并且客户端必须能够回复服务器。
我认为我必须使用路由器/经销商,但我不确定我是否需要两种方式。
此外,有没有办法让整个范例只在服务器端和每个客户端使用一个端口?
【问题讨论】:
问:有没有办法只使用服务器/客户端的一个端口?
嗯,这是比较简单的部分。不,这是无法实现的。学院里只有一个电话亭会在走廊里响起,但无助于拨打各自系的电话,越难正确联系到呼叫方的量子力学教授(而不是美术教授) .
使用但一个端口意味着有机会公开一个且只有一个 ZeroMQ Scalable Formal Communication Pattern Archetype AccessPoint 和(除了非常具体的 PAIR/PAIR 分布式行为 Archetype )有互连代理的 AccessPoint-s 总是某种硬连线的分布式行为。
这意味着,使用一个端口只提供一种且只有一种这样的分布式行为,而不是它们的混合。
这也回答了你的第一部分。如果REQ/REP分布式行为原型用于从客户端节点到服务器的方向,另一个REQ/REP分布式行为原型用于从服务器到客户端节点的相反方向,这些(定向) 服务不能共存于同一个address:port。
奖励部分:一种拯救生命,但有点脏的技巧
(不适用于医疗和/或紧急系统)
可以排序超级采样一个且只有一个REQ/REP消息传递方向,并添加一个棘手的“准协议”,以便为两个预期的信令方向提供相同的通道。如果从一侧发送足够多的协议消息,则可以是 { client |服务器 }REQ/REP消息发起者将简单地发送 NOP 消息,足以允许REP方回复方“准发起”其“准-REQ-消息”,但仍然是真实的-@987654331 @-AccessPoint 在单一的REQ/REP分布式行为原型中。
是的,性能 和 资源 的使用是这样做的成本,但需要仔细的软现实-如果您的需求极度依赖于仅使用一个端口,并且您的意识和您的部署生态系统可以容忍这种超采样的流量模式增加-REQ/REP数据流
您可能还喜欢 StackOverflow 上关于不可避免的相互死锁的帖子,分布式 REQ/REQ FSA-s 将陷入其中。
【讨论】: