zeromq应用学习(1)——编译zeromq的示例程序

2024-06-07 22:38

本文主要是介绍zeromq应用学习(1)——编译zeromq的示例程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前段时间和crazyhadoop聊天中,他推荐了zeromq这个开源库。所以今天开始学习一下。看了一下zeromq的在线文档,感觉确实不错,准备学习一下。

我的目的是阅读zeromq的源代码,那么首先要学会去用zeromq,所以刚开始是zeromq的应用学习,然后再开始阅读其源代码。另外,为了重新拾起以前的C++,所以在学习zeromq的过程中,主要使用C++。

今天先来编译一下其示例程序吧。

首先要先安装zeromq,使用默认的选项./configure, make, make install。

然后是zeromq的server的示例代码
  1. #include <zmq.hpp>
  2. #include <string>
  3. #include <iostream>
  4. #include <unistd.h>

  5. int main () {
  6.     // Prepare our context and socket
  7.     zmq::context_t context (1);
  8.     zmq::socket_t socket (context, ZMQ_REP);
  9.     socket.bind ("tcp://*:5555");

  10.     while (true) {
  11.         zmq::message_t request;

  12.         // Wait for next request from client
  13.         socket.recv (&request);
  14.         std::cout << "Received Hello" << std::endl;

  15.         // Do some 'work'
  16.         sleep (1);

  17.         // Send reply back to client
  18.         zmq::message_t reply (5);
  19.         memcpy ((void *) reply.data (), "World", 5);
  20.         socket.send (reply);
  21.     }
  22.     return 0;
  23. }
编译:
  1. g++ -g -Wall -fPIC -I../../include -I../../utils -shared -c server.cpp -o server.o
  2. cc -L../../lib -g -lstdc++ -lzmq -o server server.o
在编译的时候,如果找不到zmq库,别忘了把安装路径加入到/etc/ld.so.conf中,并执行ldconfig。

下面是client的示例程序
  1. //
  2. // Hello World client
  3. // Connects REQ socket to tcp://localhost:5555
  4. // Sends "Hello" to server, expects "World" back
  5. //
  6. #include <zmq.h>
  7. #include <string.h>
  8. #include <stdio.h>
  9. #include <unistd.h>

  10. int main (void)
  11. {
  12.     void *context = zmq_init (1);

  13.     // Socket to talk to server
  14.     printf ("Connecting to hello world server…\n");
  15.     void *requester = zmq_socket (context, ZMQ_REQ);
  16.     zmq_connect (requester, "tcp://localhost:5555");

  17.     int request_nbr;
  18.     for (request_nbr = 0; request_nbr != 10; request_nbr++) {
  19.         zmq_msg_t request;
  20.         zmq_msg_init_size (&request, 5);
  21.         memcpy (zmq_msg_data (&request), "Hello", 5);
  22.         printf ("Sending Hello %d…\n", request_nbr);
  23.         zmq_send (requester, &request, 0);
  24.         zmq_msg_close (&request);

  25.         zmq_msg_t reply;
  26.         zmq_msg_init (&reply);
  27.         zmq_recv (requester, &reply, 0);
  28.         printf ("Received World %d\n", request_nbr);
  29.         zmq_msg_close (&reply);
  30.     }
  31.     zmq_close (requester);
  32.     zmq_term (context);
  33.     return 0;
  34. }
编译:
  1. g++ -g -Wall -fPIC -I../../include -I../../utils -shared -c client.cpp -o client.o
  2. cc -L../../lib -g -lstdc++ -lzmq -o client client.o

下面运行一下:
  1. [xxx@xxx-vm-fc13 client]$ ./client
  2. Connecting to hello world server…
  3. Sending Hello 0…
  4. Received World 0
  5. Sending Hello 1…
  6. Received World 1
  7. Sending Hello 2…
  8. Received World 2
  9. Sending Hello 3…
  10. Received World 3
  11. Sending Hello 4…
  12. Received World 4
  13. Sending Hello 5…
  14. ^C
  15. [xxx@xxx-vm-fc13 client]$
  1. [xxx@xxx-vm-fc13 server]$ ./server
  2. Received Hello
  3. Received Hello
  4. Received Hello
  5. Received Hello
  6. Received Hello
  7. Received Hello
  8. ^C
  9. [xxx@xxx-vm-fc13 server]$

虽然使用的是示例程序,但是从代码上看,使用zeromq确实比直接使用socket要简单方便的多。更何况据说还高效。

今天只是简单的试用zeromq,以后就慢慢开始深入了。

这篇关于zeromq应用学习(1)——编译zeromq的示例程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040505

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl