Publish-Subscribe 方法在以下情况下是否有效:
- 发布者和订阅者位于不同的网络中(我检查过一次 - 它有效)
- 订阅者在 NAT\firewall 后面
在这两种情况下,数据包路由都能正常工作。
据我了解 PUB\SUB 使用相同的 TCP 传输,所以如果 PUB\SUB 不起作用,那么标准 Windows winsock 也不起作用?如果仅未定义数据包路由机制,是否需要PUB\SUB 代理(如http://zguide.zeromq.org/page:all#toc34 )?
Publish-Subscribe 方法在以下情况下是否有效:
在这两种情况下,数据包路由都能正常工作。
据我了解 PUB\SUB 使用相同的 TCP 传输,所以如果 PUB\SUB 不起作用,那么标准 Windows winsock 也不起作用?如果仅未定义数据包路由机制,是否需要PUB\SUB 代理(如http://zguide.zeromq.org/page:all#toc34 )?
我发现一些代码使用 PUB\SUB 模型并在此处与 NAT 一起使用http://grokbase.com/t/zeromq/zeromq-dev/112q9934vg/nat-firewall-pub-sub-traversal:
连接而不是绑定的发布者:
import zmq
ctxt = zmq.Context()
pub = ctxt.socket(zmq.PUB)
pub.connect("tcp://127.0.0.1:2000")
while 1:
pub.send(os.urandom(5))
绑定而不是连接的订阅者:
import zmq
ctxt = zmq.Context()
sub = ctxt.socket(zmq.SUB)
sub.bind("tcp://127.0.0.1:2000")
while 1:
sub.rcv()