如何用ZeroMQ实现UDP组播Pub-Sub(基于Golang)
蒙卓 · · 7184 次点击 · · 开始浏览ZeroMQ有一对Pub/Sub socket 类型,但是网上的教程一般侧重于使用TCP版本的......
虽然TCP版本的也能组网,但是略显麻烦,今天我来给大家介绍一下基于PGM协议的ZeroMQ Pub/Sub模型 首先要编译安装OpenPGM brew
install libpgm 接着是zmq brew install zmq --with-pgm 这样就准备好了环境了,
这里需要了解一下PGM网络的原理,很简单,如下图 Udp_encapsulated_ports
绿色的就是发送方,向目的组播地址239.192.0.1 端口3055(黑色粗线)发送数据,然后所有监听此端口的接收者(Receiver)都收到了。
就这么简单。 然后就是写代码咯:
soc = zmq.NewSocket(zmq.PUB)
soc.Connect("epgm://192.168.1.100;239.192.0.1:3055")
soc.SendMessage("Hi")
呃......192.168.1.100? 这个是pgm的特点,你需要指定发送组播包的网卡名,一般人记不住网卡名......所以用此网卡所持有的IP来标示。 p.s.
- PGM有个特点,就是发送方进行流量控制,zmq中使用的是setrate,切记在Connect之前使用
- zmq会整理包,所以再散的数据,都会组合成一个message发送出来(不愧是智能网络)
- 实际测试时......16Mbps的流量根本不是问题
- 需要debug PGM时
export PGM_MIN_LOG_LEVEL=TRACE
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
ZeroMQ有一对Pub/Sub socket 类型,但是网上的教程一般侧重于使用TCP版本的......
虽然TCP版本的也能组网,但是略显麻烦,今天我来给大家介绍一下基于PGM协议的ZeroMQ Pub/Sub模型 首先要编译安装OpenPGM brew
install libpgm 接着是zmq brew install zmq --with-pgm 这样就准备好了环境了,
这里需要了解一下PGM网络的原理,很简单,如下图 Udp_encapsulated_ports
绿色的就是发送方,向目的组播地址239.192.0.1 端口3055(黑色粗线)发送数据,然后所有监听此端口的接收者(Receiver)都收到了。
就这么简单。 然后就是写代码咯:
soc = zmq.NewSocket(zmq.PUB)
soc.Connect("epgm://192.168.1.100;239.192.0.1:3055")
soc.SendMessage("Hi")
呃......192.168.1.100? 这个是pgm的特点,你需要指定发送组播包的网卡名,一般人记不住网卡名......所以用此网卡所持有的IP来标示。 p.s.
- PGM有个特点,就是发送方进行流量控制,zmq中使用的是setrate,切记在Connect之前使用
- zmq会整理包,所以再散的数据,都会组合成一个message发送出来(不愧是智能网络)
- 实际测试时......16Mbps的流量根本不是问题
- 需要debug PGM时
export PGM_MIN_LOG_LEVEL=TRACE