ZeroMQ主要是有一个命名空间zmq。其下包含着很多类。zmq.hpp中主要的类有:

*
context_t

*
message_t

*
socket_t

*
monitor_t

*
error_t

    其中context_t、message_t都有一个友元类socket_t。

socket_t有一个友元类monitor_t。

    开始讲解用代码例子来讲解:

REQ-REP模型:

client.cpp
// Hello World client #include <zmq.h> #include <string.h> #include <stdio.h>
#include <unistd.h> int main (void) { printf ("Connecting to hello world
server…\n"); void *context = zmq_ctx_new (); void *requester = zmq_socket
(context, ZMQ_REQ); zmq_connect (requester, "tcp://localhost:5555"); int
request_nbr; for (request_nbr = 0; request_nbr != 10; request_nbr++) { char
buffer [10]; printf ("Sending Hello %d…\n", request_nbr); zmq_send (requester,
"Hello", 5, 0); zmq_recv (requester, buffer, 10, 0); printf ("Received World
%d\n", request_nbr); } zmq_close (requester); zmq_ctx_destroy (context); return
0; } // Hello World server in C++ // Binds REP socket to tcp://*:5555 //
Expects "Hello" from client, replies with "World" // #include <zmq.hpp>
#include <string> #include <iostream> #ifndef _WIN32 #include <unistd.h> #else
#include <windows.h> #define sleep(n) Sleep(n) #endif int main () { // Prepare
our context and socket zmq::context_t context (1); zmq::socket_t socket
(context, ZMQ_REP); socket.bind ("tcp://*:5555"); while (true) { zmq::message_t
request; // Wait for next request from client socket.recv (&request); std::cout
<< "Received Hello" << std::endl; // Do some 'work' sleep(1); // Send reply
back to client zmq::message_t reply (5); memcpy (reply.data (), "World", 5);
socket.send (reply); } return 0; }
    zmq::context_t context (1);创建一个context_t 类。

使用zmq::context_t context也行。

    该类有3个构造函数,其中一个是移动语义。本质上是为了使用zmq_ctx_new()去创建一个指针。只不过带参数的构造函数会使用zmq_ctx_set()函数。
//不带参构造函数context_t ();//传入io_threads_(IO线程的ID)和max_sockets_(最大连接数)context_t
(int io_threads_, int max_sockets_ = ZMQ_MAX_SOCKETS_DFLT);//移动语义
context_t (context_t &&rhs) ZMQ_NOTHROW : ptr (rhs.ptr);
zmq::socket_t socket:

    创建一个socket_t类。该类有3个构造函数,其中一个是移动语义。本质上是为了使用zmq_ctx_new()去创建一个指针。只不过带参数的构造函数会使用zmq_ctx_set()函数。

     ZMQ_REQ、ZMQ_REP分别对应枚举中的0和1.

*  
*  
*   socket_t(context_t& context_, int type_);
socket_t(context_t& context_, socket_type type_);socket_t(socket_t&& rhs)
ZMQ_NOTHROW : ptr(rhs.ptr);
    构造函数都是使用传入的context然后调用init()函数进行初始化指针*ptr和*ctxptr。

 

zmq::message_t request:

    创建一个message_t类。该类有6个构造函数和一个移动语义构造函数。构造函数过多。请自己查阅。主要就是为了存储信息。

    socket.bind ("tcp://*:5555"); 就是调用socket.bind()函数在TCP/IP协议上绑定端口5555。

    socket.send()发送消息。

    socket.recv()接收信息。

技术
©2019-2020 Toolsou All rights reserved,
某东14薪变16薪,是诚意还是套路?HashMap详解os模块的简单使用html写樱花树,写樱花树的作文浏览器内核(理解)java四大函数式接口(重点,简单)让人意想不到的Python之樱花树(turtle库的华丽样式)计算机网络---计算机网络基本概念(协议、体系)06【若依框架解读】数据范围过滤--太牛了