阅读zeromq guide的一些学习记录

zeromq官方例子 在VC下运行会有些跨平台的错误

我这里有做修改 稍后会发布出来

相关的代码与库 
http://download.zeromq.org/zeromq-3.2.5.zip
http://download.zeromq.org/czmq-1.4.0.zip
示例代码
https://github.com/imatix/zguide
/**************************************************************
技术博客
http://www.cnblogs.com/itdef/
 
技术交流群
群号码:324164944
 
欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/
 

zeromq是对对常用的网络通讯的收发、转发、订阅、推送等模式在socket底层通讯进行封装。

指南页面 http://zguide.zeromq.org/page:all

首先是最简单的一对一收发模式

socket在代码中标记为ZMQ_REQ ZMQ_REP

ZMQ_REQ 由客户端使用 用来发送请求和收取服务器的回复。此种标记仅允许发送请求并紧跟接受回复的处理序列模式

ZMQ_REP 由服务器使用 用来接受请求并且发送给与客户端的回复。此种标记仅允许接受请求并紧跟发送回复的处理序列模式

代码如下:

// hwserver.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <zmq.h>
#include <string.h> int main()
{
void* context = zmq_ctx_new();
void* responder = zmq_socket(context, ZMQ_REP);
zmq_bind(responder, "tcp://*:5555"); while ()
{
zmq_msg_t request;
zmq_msg_init(&request);
zmq_msg_recv(&request,responder,);
printf("received Hello\n");
zmq_msg_close(&request); Sleep();
zmq_msg_t reply;
zmq_msg_init_size(&reply, );
memcpy(zmq_msg_data(&reply), "World", );
zmq_msg_send(&reply, responder, );
zmq_msg_close(&reply);
}
// should not arrive here
zmq_close(responder);
zmq_ctx_destroy(context);
return ;
}
// hwclient_c.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <zmq.h>
#include <string.h> int main()
{
void* context = zmq_ctx_new(); printf("Connecting to hello world server...\n"); void* requester = zmq_socket(context, ZMQ_REQ);
zmq_connect(requester, "tcp://localhost:5555"); int request_nbr;
for (request_nbr = ; request_nbr != ; request_nbr++) {
char buffer[];
printf("Sending Hello %d…\n", request_nbr);
zmq_send(requester, "Hello", , );
zmq_recv(requester, buffer, , );
printf("Received World %d\n", request_nbr);
}
zmq_close(requester);
zmq_ctx_destroy(context); return ;
}

关于zeromq的消息字符串需要注意以下地方

仅仅传输字符串的文字部分而没有c语言用来结尾的'\0'

字符串结构如图

zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP的更多相关文章

  1. zeromq学习记录(六)C语言示例

    考虑到官方的示例c语言是最多的 官方未使用C++语言演示的例子就使用VC编译C语言例子 记录在此 /************************************************** ...

  2. zeromq学习记录(七)订阅发布消息封装

    之前也有提到 使用订阅发布 pub sub模式必须要显示定义ZMQ_SUBSCRIBE 只有以此模式定义的过滤字节开头的消息才会被订阅者收到 如果想收到所有信息 可定义subscriber.setso ...

  3. Mybatis学习记录(一)---- 简单的CRUD

    1 mybatis是什么? mybatis是一个持久层的框架,是apache下的顶级项目. mybatis托管到googlecode下,再后来托管到github下(https://github.com ...

  4. zeromq学习记录(八)负载均衡 附ZMQ_ROUTER的流程分析

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  5. zeromq学习记录(五)vc下多线程

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  6. zeromq学习记录(四)使用ZMQ_ROUTER ZMQ_DEALER

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  7. zeromq学习记录(三)使用ZMQ_PULL ZMQ_PUSH

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  8. zeromq学习记录(二)天气更新服务器使用ZMQ_SUB ZMQ_PUB

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  9. Zookeeper学习记录及Java客户端连接示例

    1. Zookeeper 1.1 简介 ZooKeeper is a centralized service for maintaining configuration information, na ...

随机推荐

  1. 实验-12-JSP简单入门

    参考资料 JSP实验参考文件 主要看实验任务书 实验1. 第一个HTML页面与Tomcat 实验内容:任务书中的JSP-实验1. 1.1 EclipseJEE的使用 新建Tomcat Server 新 ...

  2. js window.location用法

    <script> //设置或获取 href 属性中跟在问号后面的部分. console.log(window.location.search)//设置或获取对象指定的文件名或路径conso ...

  3. Linux进程被杀掉(OOM killer),查看系统日志

    基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉. ...

  4. python之路——15

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 1.迭代器 1.可迭代协议:含有iter 2.迭代器协议:含有iter和next 3.特点:节省内存, ...

  5. [SQL]sql server中如何直接查询存储过程EXEC返回的结果集?

    Declare @T Table (iDay VARCHAR(),iNum DECIMAL(,),yuxiang DECIMAL(,)) Insert @T --EXEC [dbo].[BSP0101 ...

  6. ETL讲解(很详细!!!)

    ETL讲解(很详细!!!) ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要 ...

  7. expect login ssh

    #!/usr/bin/expect -f set pwffd [lindex $argv 0] spawn ssh cmesvr2i expect "*password:" sen ...

  8. profile default1

    DEVPISAP01:/sapmnt/ISD/profile # more ISD_J20_SHADEVEAIAP01 SAPSYSTEMNAME = ISD SAPSYSTEM = 20 INSTA ...

  9. ELK+Beats日志分析系统部署

    一.            名词介绍: E:ElasticSearch 搜索,简称es L:Logstash 管理日志和事件的工具 K:Kibana 功能强大的数据显示客户端 Beats 轻量级数据传 ...

  10. CPU与内存互联的架构演变

    随着计算机中CPU核数目的增加,传统的UMA(unifonn memory access)架构由于对关键硬件(如中央内存控制器)的竞争加剧出现了性能上的瓶颈,即扩展性不强.而NUMA架构则以其良好的可 ...