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

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.