本文介绍了ZeroMQ 在 NAT/防火墙后面的不同网络中发布-订阅模式的使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

发布-订阅方法是否适用于:

Does Publish-Subscribe method work if:

  1. 发布者和订阅者位于不同的网络(我检查过一次 - 有效)
  2. 订阅者位于 NAT\防火墙之后

在这两种情况下,数据包路由都可以正常工作.

In both cases packet routing works correctly.

据我所知,PUB\SUB 使用相同的 TCP 传输,所以如果 PUB\SUB 不起作用,那么标准的 windows winsock 也不起作用?是 PUB\SUB 代理(比如 http://zguide.zeromq.org/page:all#toc34) 仅当数据包路由机制未定义时才需要?

As I understand PUB\SUB uses the same TCP transport, so if PUB\SUB doesn't work so standard windows winsock doesn't work too?Is PUB\SUB proxy (like that http://zguide.zeromq.org/page:all#toc34) needed if packet routing mechanism is undefined only?

推荐答案

我发现一些代码使用 PUB\SUB 模型并在此处与 NAT 一起使用 http://grokbase.com/t/zeromq/zeromq-dev/112q9934vg/nat-firewall-pub-sub-traversal:

I've found some code uses PUB\SUB model and works with NAT here http://grokbase.com/t/zeromq/zeromq-dev/112q9934vg/nat-firewall-pub-sub-traversal:

连接而不是绑定的发布者:

Publisher that connects, rather than binds:

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))

绑定而不是连接的订阅者:

Subscriber that binds, rather than connects:

import zmq
ctxt = zmq.Context()
sub = ctxt.socket(zmq.SUB)
sub.bind("tcp://127.0.0.1:2000")
while 1:
sub.rcv()

这篇关于ZeroMQ 在 NAT/防火墙后面的不同网络中发布-订阅模式的使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 08:53