Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们如何决定推/拉插座应该绑定()还是连接()?_C#_Zeromq - Fatal编程技术网

C# 我们如何决定推/拉插座应该绑定()还是连接()?

C# 我们如何决定推/拉插座应该绑定()还是连接()?,c#,zeromq,C#,Zeromq,在研究ZeroMQ时,PUSH和PULL类型的套接字对我来说没有多大意义。据我所知,PUSH套接字在发送时应始终.connect(),而PULL套接字应.bind(),因为它只接收数据 通常的示例如下所示: 以下是它通常的设置方式: 节点A有推送套接字和绑定(为什么?) 节点C具有拉套接字和绑定 中间节点有拉和推套接字,但.bind()无,和 .connect()两者都有 我们如何决定推/拉式插座是应该.bind()还是应该.connect()-ed?通常,系统中更稳定的部分(“服务器”)

在研究ZeroMQ时,
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文档,其中解释了绑定和连接的使用。