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

相关文章

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印