ZeroMQ:传输桥接转发代理--模式
Posted youdud
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZeroMQ:传输桥接转发代理--模式相关的知识,希望对你有一定的参考价值。
一、需求情况
?MQ用户的1个通常要求是:“我怎么使用X技术连接我的?MQ网络?”。这其中X是某种其它网络或通信技术
简洁明了的答案是构建1个“桥梁”。桥指的是1个小型应用程序,它用一种协议与1个套接字交流,并将其转换成为另1个套接字的另一种协议。假如你喜欢,还可以将之称为1个协议解释器。?MQ中1个通常的桥接问题是对接两种传输协议或网络
二、演示典型案例
现在我们编写1个小型代理,它位于1个发布者和1组订阅者之间,对接两个网络:
前端接口(SUB)应对着驻留了天气服务器的内部网络,而后端(PUB)应对着外部网络上的订阅者
它在前端套接字上订阅气象服务,并在后端套接字上重新发布数据
这个转发代理非常类似于早期代理的例子,但关键的部分在于,前端和后端套接字在两个不同的网络上。例如,我们可以留用这个模型将多播网络(pgm传输协议)连接到一个TCP发布者
代码如下
下面是转发代理的代码,其中使用了zmq_proxy()接口来定义代理,非常简洁
// wuproxy.c
#include <stdio.h>
#include <zmq.h>
int main(){
// 1.创建新的上下文
void *context = zmq_ctx_new();
// 2.前端套接字, 用于连接内部的天气服务器
void *frontend = zmq_socket(context, ZMQ_XSUB);
zmq_connect(frontend, "tcp://localhost:5556");
// 3.后端套接字, 用来处理外部的订阅者的请求
void *backend = zmq_socket(context, ZMQ_XPUB);
zmq_bind(backend, "tcp://111.229.177.161:8100");
// 4.持续运行代理 zmq_proxy(frontend, backend, NULL);
// 5.关闭套接字、清除上下文
zmq_close(frontend);
zmq_close(backend);
zmq_ctx_destroy(context);
return 0;
}
编译运行如下
gcc -o wuproxy wuproxy.c -lzmq
运行如下:
上方的是发布者(wuserver.c),运行在内部,其绑定的地址是“tcp://*:5556”
中间的是代理(就是上面的wuproxy.c),也运行在内网。其连接到发布者localhost:5556上,并绑定外网地址111.229.177.161:8100上(由于我们使用的是腾讯的云服务器,云服务器编写服务器程序绑定时只能使用0.0.0.0,因此其实际绑定的地址是0.0.0.0:8100)
最下面的是订阅者(wuclient.c),运行在外网,其连接到代理111.229.177.161:8100上
以上是关于ZeroMQ:传输桥接转发代理--模式的主要内容,如果未能解决你的问题,请参考以下文章