码迷,mamicode.com
首页 > 其他好文 > 详细

ZeroMQ:传输桥接、转发代理--模式

时间:2020-06-22 23:22:26      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:backend   user   cli   连接   ret   清除   bind   服务器程序   new   

一、需求情况
?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:传输桥接、转发代理--模式

标签:backend   user   cli   连接   ret   清除   bind   服务器程序   new   

原文地址:https://www.cnblogs.com/youdud/p/13179299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!