C# 我们如何决定推/拉插座应该绑定()还是连接()?
在研究ZeroMQ时,C# 我们如何决定推/拉插座应该绑定()还是连接()?,c#,zeromq,C#,Zeromq,在研究ZeroMQ时,PUSH和PULL类型的套接字对我来说没有多大意义。据我所知,PUSH套接字在发送时应始终.connect(),而PULL套接字应.bind(),因为它只接收数据 通常的示例如下所示: 以下是它通常的设置方式: 节点A有推送套接字和绑定(为什么?) 节点C具有拉套接字和绑定 中间节点有拉和推套接字,但.bind()无,和 .connect()两者都有 我们如何决定推/拉式插座是应该.bind()还是应该.connect()-ed?通常,系统中更稳定的部分(“服务器”)
PUSH
和PULL
类型的套接字对我来说没有多大意义。据我所知,PUSH
套接字在发送时应始终.connect()
,而PULL
套接字应.bind()
,因为它只接收数据
通常的示例如下所示:
以下是它通常的设置方式:
- 节点A有推送套接字和绑定(为什么?)
- 节点C具有拉套接字和绑定
- 中间节点有拉和推套接字,但
无,和.bind()
两者都有.connect()
我们如何决定推/拉式插座是应该
.bind()
还是应该.connect()
-ed?通常,系统中更稳定的部分(“服务器”)将绑定,而更稳定的部分(多个“客户端”)将连接
大多数ZeroMQ套接字可以绑定(充当服务器)或连接(充当客户端)。您可以先连接,然后再绑定。客户端将继续尝试连接,直到服务器启动。这是ZeroMQ的一个非常好的特性
在推/拉的情况下,可以绑定或连接。这同样适用于酒吧/酒吧、路由器/经销商等
在图中,您可以在运行时添加或删除中间节点,而无需重新配置或重新启动节点A或C。这可能就是它们选择绑定A和C的原因。为什么?(.bind()而不是.connect())因为简单地节点-A没有任何知识,有多少节点-B工作类型
拉
-推
数据处理器在不久的将来会出现/消失,它对各自地址的了解就越少(因此,它无法从自己的角度猜测何时/何地连接到.connect()
)
怎么做?(决定是.bind()还是.connect()-ed)
在静态确定性系统设计中,一个人可以自由选择。ZeroMQ框架完成其余部分。很聪明,不是吗
在动态非确定性系统设计中,一个人应该在那些保证了“可见性”(地址、连通性)的节点上
.bind()
,其他人应该.connect()
连接到“灯塔”的节点上在严酷的现实中,他们仍然可以看到:o)我建议阅读zeromq文档,其中解释了绑定和连接的使用。