zmq_device test
来源:互联网 发布:打铃软件 编辑:程序博客网 时间:2024/06/10 00:09
/************************************************************************* > File Name: test.cpp > Author: wangzhicheng > Mail: 2363702560@qq.com > Created Time:2017-02-13 ************************************************************************/ #include <iostream> #include <vector> #include <thread> #include <chrono> #include "ZMQ_PipeSocket.h"using namespace zmqpipe;static const string ADDR0 = "tcp://127.0.0.1:8888";static const chrono::milliseconds dura(1000); // 1svoid client_thread(){string str;ZMQ_PIPESocket sender;if(!sender.Init(ZMQ_REQ, ADDR0)){cerr << "client init failed...!" << endl;exit(EXIT_FAILURE);}while(1){if(!sender.Send("Hello World...!")){cerr << "client send failed...!" << endl;}if(!sender.Recv(str)){cerr << "client recv failed...!" << endl;}else {cout << "client recv = " << str << endl;}this_thread::sleep_for(dura);}}int main() { thread th_client(client_thread);th_client.join(); return 0; } /************************************************************************* > File Name: test.cpp > Author: wangzhicheng > Mail: 2363702560@qq.com > Created Time:2017-02-13 ************************************************************************/ #include <iostream> #include <vector> #include <thread> #include <chrono> #include "ZMQ_PipeSocket.h"using namespace zmqpipe;static const string ADDR = "ipc://127.0.0.1.ipc";//static const string ADDR = "tcp://127.0.0.1:9999";static const chrono::milliseconds dura(1000); // 1svoid server_thread(){string str;ZMQ_PIPESocket receiver;if(!receiver.Init(ZMQ_REP, ADDR)){cerr << "server init failed...!" << endl;exit(EXIT_FAILURE);}while(1){if(!receiver.Recv(str)){cerr << "server recv failed...!" << endl;}else cout << "server recv = " << str << endl;if(!receiver.Send(str)){cerr << "server send failed...!" << endl;}this_thread::sleep_for(dura);}}int main() { static const int N = 1;vector<thread>worker_threads;for(int i = 0;i < N;i++){worker_threads.emplace_back(thread(server_thread));}for(auto &th:worker_threads) {th.join();} return 0; } /************************************************************************* > File Name: test.cpp > Author: wangzhicheng > Mail: 2363702560@qq.com > Created Time:2017-02-13 ************************************************************************/ #include <iostream> #include <vector> #include <thread> #include <chrono> #include "ZMQ_PipeSocket.h"using namespace zmqpipe;static const string ADDR0 = "tcp://*:8888";static const string ADDR1 = "ipc://127.0.0.1.ipc";//static const string ADDR1 = "tcp://*:9999";int main() { ZMQ_PIPESocket clients;if(!clients.Init(ZMQ_ROUTER, ADDR0)){cerr << "client init failed...!" << endl;exit(EXIT_FAILURE);}ZMQ_PIPESocket workers;if(!workers.Init(ZMQ_DEALER, ADDR1)){cerr << "workers init failed...!" << endl;exit(EXIT_FAILURE);}zmq_device(ZMQ_QUEUE, clients.m_pSocket, workers.m_pSocket);cout << "ll" << endl; return 0; } /************************************************************************* * > File Name: ZMQ_PipeSocket.cpp * > Author: wangzhicheng * > Mail: 2363702560@qq.com * > Created Time: 2017-02-07 * > statement: ZMQ封装类 *************************************************************************/ #include "ZMQ_PipeSocket.h" namespace zmqpipe { ZMQ_PIPESocket::ZMQ_PIPESocket() { m_pContext = NULL; m_pSocket = NULL; } bool ZMQ_PIPESocket::Init(int SocketType, const string &addr, int sendhwm, int recvhwm, int sendtimeout) { m_pContext = zmq_ctx_new(); if(!m_pContext) return false; m_pSocket = zmq_socket(m_pContext, SocketType); if(!m_pSocket) return false; int rc;switch(SocketType){case ZMQ_PULL:case ZMQ_PUB:case ZMQ_ROUTER:case ZMQ_DEALER:rc = zmq_bind(this->m_pSocket, addr.c_str());break;case ZMQ_REP:case ZMQ_REQ:case ZMQ_PUSH:case ZMQ_SUB:rc = zmq_connect(this->m_pSocket, addr.c_str());break;default:return false;} rc = zmq_setsockopt(m_pSocket, ZMQ_SNDHWM, &sendhwm, sizeof(sendhwm)); if(rc) return false; rc = zmq_setsockopt(m_pSocket, ZMQ_RCVHWM, &recvhwm, sizeof(recvhwm)); if(rc) return false; rc = zmq_setsockopt(m_pSocket, ZMQ_SNDTIMEO, &sendtimeout, sizeof(sendtimeout)); if(rc) return false; m_strSendServer = addr; return true; } /* * @brief 发送info指向的对象 * @len 对象的大小 字节数 * */ bool ZMQ_PIPESocket::Send(void *info, int len) { int rc; zmq_msg_t msg; rc = zmq_msg_init_size(&msg, len); if(rc) return false; memcpy(zmq_msg_data(&msg), (char *)info, len); rc = zmq_msg_send(&msg, this->m_pSocket, 0); return rc == len; } /* * @brief 发送string对象 * */ bool ZMQ_PIPESocket::Send(const string &strSend) { int rc; size_t len = strSend.size(); zmq_msg_t msg; rc = zmq_msg_init_size(&msg, len); if(rc) return false; memcpy(zmq_msg_data(&msg), strSend.c_str(), len); size_t Len = zmq_msg_send(&msg, this->m_pSocket, 0); return Len == len; } /* * @brief 接收数据 接收的数据由info指向 * */ bool ZMQ_PIPESocket::Recv(void *info) { int rc; zmq_msg_t msg; rc = zmq_msg_init(&msg); if(rc) return false; int len = zmq_msg_recv(&msg, this->m_pSocket, 0); // 阻塞方式 if(len <= 0) return false; memcpy(info, (char *)zmq_msg_data(&msg), len); if(zmq_msg_close(&msg)) return false; return true; } /* * @brief 接收string对象数据 * */ bool ZMQ_PIPESocket::Recv(string &strRecv) { int rc; zmq_msg_t msg; rc = zmq_msg_init(&msg); if(rc) return false; int len = zmq_msg_recv(&msg, this->m_pSocket, 0); // 阻塞方式 if(len <= 0) return false; strRecv.assign((char *)zmq_msg_data(&msg), len); if(zmq_msg_close(&msg)) return false; return true; } /* * @brief recieving from a socket is over * */bool ZMQ_PIPESocket::RecvOver(){int64_t more;size_t more_size = sizeof(more);zmq_getsockopt(m_pSocket, ZMQ_RCVMORE, &more, &more_size);return more <= 0;}ZMQ_PIPESocket::~ZMQ_PIPESocket() { if(m_pSocket) { zmq_close(m_pSocket); m_pSocket = NULL; } if(m_pContext) { zmq_ctx_destroy(m_pContext); m_pContext = NULL; } } }
0 0
- zmq_device test
- zmq_device()
- test
- test
- test
- test
- test
- test
- test
- Test
- test
- Test
- test
- test
- test
- test
- test
- test
- 堆相关
- Android仿微信朋友圈,全文收起功能,附源码
- Java的动态绑定机制
- 蓝桥杯 2015 省赛 1 方程整数解
- 用npm来部署快速一个httpweb服务器
- zmq_device test
- Java基础2-基本程序设计结构
- Linux环境进程间通信
- 双重检查锁定与延迟初始化
- [Boolan] C++第四周 homework 虚函数表与内存对齐
- 认识CArchive类
- memecache安装及使用详解
- 蓝桥杯 2015 2 星系炸弹
- Oracle数据库面试练习题