005 ZeroMQ REQ-<ROUTER-Dealer>-REP代理应答与请求
来源:互联网 发布:佳博网络打印机设置 编辑:程序博客网 时间:2024/04/28 22:26
框架:
优点是,如果客户端是同型的,服务端也是同型的,都可以动态加入或退出。
但消息只实现一半路由,要完全路由,参考上一篇文章。
内部消息传递原理:
实现代码:
client.cpp:
#include<zmq.h>#include<iostream>#include<thread>#include<chrono>using std::endl;using std::cout;int main(){ void* pContext = zmq_ctx_new(); void* pReqSock = zmq_socket(pContext, ZMQ_REQ); zmq_connect(pReqSock, "tcp://localhost:6601"); cout << "start client..." << endl; while (true) { static int i = 0; cout << "sent hello:" << i; zmq_msg_t msgOut; zmq_msg_init_size(&msgOut,16); sprintf_s((char*)zmq_msg_data(&msgOut), 16, "hello%d", i++); zmq_msg_send(&msgOut, pReqSock, 0); zmq_msg_close(&msgOut); zmq_msg_t msgIn; zmq_msg_init(&msgIn); zmq_msg_recv(&msgIn, pReqSock, 0); cout << "----------receive:" << (char*)zmq_msg_data(&msgIn)<<endl; zmq_msg_close(&msgIn); std::this_thread::sleep_for(std::chrono::milliseconds(200)); } zmq_close(pReqSock); zmq_ctx_destroy(pContext); return 0;}
proxy.cpp
#include<zmq.h>#include<iostream>using std::endl;using std::cout;int main(){ void* pContext = zmq_ctx_new(); void* frontEnd = zmq_socket(pContext, ZMQ_ROUTER); zmq_bind(frontEnd, "tcp://*:6601"); void* backEnd = zmq_socket(pContext, ZMQ_DEALER); zmq_bind(backEnd, "tcp://*:6602"); cout << "start proxy..." << endl; zmq_proxy(frontEnd, backEnd, NULL);//为了省事就直接使用内置代理了,这里也可以手动实现zmq_poll,zmq_pollitem_t,参考前一篇手动实现代理过程,比较复杂。 zmq_close(frontEnd); zmq_close(backEnd); zmq_ctx_destroy(pContext); return 0;}
server.cpp
#include<zmq.h>#include<iostream>using std::endl;using std::cout;int main(){ void* pContext = zmq_ctx_new(); void* pReqSock = zmq_socket(pContext, ZMQ_REP); zmq_connect(pReqSock, "tcp://localhost:6602"); cout << "start server..." << endl; while (true) { zmq_msg_t msgIn; zmq_msg_init(&msgIn); zmq_msg_recv(&msgIn, pReqSock, 0); cout << "get:" << (char*)zmq_msg_data(&msgIn); zmq_msg_close(&msgIn); static int i = 0; cout << "-----reply world:" << i<<endl; zmq_msg_t msgOut; zmq_msg_init_size(&msgOut, 16); sprintf_s((char*)zmq_msg_data(&msgOut), 16, "world%d", i++); zmq_msg_send(&msgOut, pReqSock, 0); zmq_msg_close(&msgOut); } zmq_close(pReqSock); zmq_ctx_destroy(pContext); return 0;}
0 0
- 005 ZeroMQ REQ-<ROUTER-Dealer>-REP代理应答与请求
- ZMQ源码分析(八)--ROUTER-DEALER & REQ-REP
- ZeroMQ 之 Rep/Req
- 005 ZeroMQ REQ-<ROUTER-ROUTER>-REQ 路由模式
- ZeroMQ之REP/REQ模式
- ZeroMQ(java)之router/dealer
- ZeroMQ(java)之Router与Dealer运行原理
- ZeroMQ(java)之Router与Dealer运行原理
- ZeroMQ(java)之Router与Dealer运行原理
- ZeroMQ(java)之Router与Dealer运行原理
- ZeroMQ timeout a REQ/REP connection
- ZeroMQ(java)之异步req/rep
- ZeroMQ(java)之Router/Dealer模式
- ZeroMQ(java)之Router/Dealer模式
- ZeroMQ(java)之Router/Dealer模式
- ZeroMQ(java)之Router/Dealer模式
- zeromq源代码分析6-2------REQ和REP
- zeromq源代码分析6-3------ROUTER和DEALER
- 毕业设计博客(一)
- python爬虫(爬游民星空壁纸)_图片损坏问题
- jsonObject.getString() 和jsonObject.optString()区别
- 实现自己的ImageLoader(2)-----LruCache与DiskLruCache缓存详解
- 指针和引用的区别
- 005 ZeroMQ REQ-<ROUTER-Dealer>-REP代理应答与请求
- 太空3D
- 欢迎使用CSDN-markdown编辑器
- pwnable之coin1
- poj 1094 Sorting It All Out 拓扑排序
- Fibonacci(POJ3070)
- PHP开源框架Laravel的安装与配置
- Android开发:Eclipse中Ctrl+O快捷键显示该java文件中所有变量及方法
- unix环境高级编程(第三版)中apue.h文件的配置问题