如何在具有多个IP的计算机上控制ZeroMQ数据包的源IP地址?

时间:2017-10-06 23:20:29

标签: python linux zeromq

Python标准库的socket.create_connection()方法有一个源地址选项,用于控制连接使用的源IP。

如果机器有多个地址,我如何使用Python ZeroMQ套接字做同样的事情?

在这种情况下,我一直在使用Linux的iproute2 ip addr add来创建地址和ZeroMQ PUB/SUB套接字原型。

2 个答案:

答案 0 :(得分:3)

好吧,ZeroMQ有点难以理解为socket - "对手" (它不是)

为什么?

经典socket是一种免费的资源。

ZeroMQ是一个相当复杂的思想和行为原则(更好的 - 分布式行为)的层次结构,有助于设计智能分布式计算系统,而无需触及控制实际事件流的低级(ZeroMQ井抽象)细节在恶劣条件的风暴中,所有分布式计算系统都是开放的(并且必须相应地处理低水平,如果由ZeroMQ保证的高级抽象和承诺将被实现并且使设计师和#39;注意力集中在他/她的核心应用部分,而不是重新设计轮子(包括所有试验和错误)来拉动O / S资源上的字符串并摇动系统服务以收集一些低悬的水果类型)。

由于这些原因,更好地直接忘记ZeroMQ" 类似某事 - socket"

ZeroMQ层次结构不到五秒钟

<强> 1
ZeroMQ承诺轻松重用一些简单的可扩展形式通信模式原型,提供特定的分布式行为{ PUB/SUB | PUSH/PULL | PAIR/PAIR | XPUB/XSUB | ... | REQ/REP }

<强> 2
除了仅使用无设备 inproc:// 传输类的情况外,在所有其他情况下,ZeroMQ需要一个或多个可调参数&# 34;的发动机&#34; - Context( nIOthreads = N ) N >= 1

第3:
有了这个,任何(未来的套接字接入点都可以实例化,从出生那一刻起就有行为原型:

aSubscribeCHANNEL = aLocalCONTEXT.socket( zmq.SUB )      # this is NOT a <SOCKET>
#                                 ^^^^^^__________________ even it was typed in

<强> 4
拥有&#34; 接入点&#34;实例准备就绪&#34;内部&#34;本地&#34; 引擎&#34;,可以使用一个或多个来锁定其在外部现实中的物化(是的,更多......哇!意思是更多来自拉动 - 串入/吹口哨从一个接入点吹出&#34; behavior-node&#34;)调用以下任何一种方法:
.bind( <transport-class>://<a-class-specific-address> )

.connect( <transport-class>://<a-class-specific-address> )

<强> 5
当且仅当.bind() - RTO就绪接入点A&#34; 被访问&#34;通过第一个实时.connect() - RTO就绪接入点B,具有任何匹配的行为配对,ZeroMQ消息/信令原型变为现场(将其命名为 socket 可能用于历史原因,在时间安排解释)

PUB/PUB永远不会适合,显而易见的原因,而PUB/SUB和许多其他行为 - 原型对将会和可爱的匹配并形成相互的 - &#34;兼容&#34 ; -behaviours将最终生效并保持如此)

那么,我如何使用Python ZeroMQ套接字执行相同的操作,给定一台具有多个地址的机器?

只需在电话中使用完全合格的规格即可 .bind( "{ tcp | pgm | epgm }://<ip>:<port#>" ) 方法已完成。

那很容易。

很酷,不是吗?

在性能调整,延迟剃须和安全性调整的引擎下,还有许多令人惊喜的惊喜。

答案 1 :(得分:0)

尝试 <Grid container direction='column' spacing={0}> // Grid 1 (Level0) <Grid item xs={12}> // Grid 1 (Level1) <Grid container direction='row' spacing={0}> <Grid item xs={6}> Logo </Grid> <Grid item xs={6}> FormControl </Grid> </Grid> </Grid> <Grid item xs={12}> // Grid 2 (Level1) <Grid container direction='column' spacing={0}> <Grid item xs={12}> // Grid 1 (Level2) <Grid container direction='row' spacing={0}> <Grid item xs={12}> <TextField/> </Grid> <Grid item xs={12}> <TextField/> </Grid> </Grid> </Grid> <Grid item xs={12}> // Grid 2 (Level2) <Grid container direction='row' spacing={0}> <Grid item xs={6}> <TextField /> </Grid> <Grid item xs={6}> <TextField /> </Grid> </Grid> </Grid> </Grid> </Grid> <Grid item xs={12}> // Grid 3 (Level1) <Grid container direction='row' spacing={0}> <Grid item xs={6}> Label </Grid> <Grid item xs={6}> Label </Grid> </Grid> </Grid> </Grid> 到遥控器时,我在protocol documentation找到了答案,将源ip放在连接字符串中的分号之前:

.connect()

在Python中,这看起来像:

rc = zmq_connect( socket, "tcp://192.168.1.17:5555;192.168.1.1:5555" )