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,
Vue + Element-ui的下拉框el-select获取额外参数PostgreSQL: 九. 索引mysql 递归查找父类的所有子节点[work] python读取txt文件最后一行java中的编译时异常和运行时异常Python 读取Excel某一列|转存jsonpython获取excel的一列或者一行的数据BugkuCTF-Web-计算器(随机数字运算验证码)(精华)2020年7月12日 webpack 常见插件的使用JQ get请求 拼接 url 参数 (查询条件)