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
原创粉丝点击