/**************************************************************
技术博客
http://www.cnblogs.com/itdef/
 
技术交流群
群号码:324164944
 
欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/
// test1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <zhelpers.hpp>
#include <thread> void RouterFunc()
{
zmq::context_t context();
zmq::socket_t broker(context, ZMQ_ROUTER);
broker.bind("tcp://*:5671"); while ()
{
std::string identity = s_recv(broker);
std::string recvStr = s_recv(broker);
recvStr = s_recv(broker);
std::cout << recvStr << std::endl; s_sendmore(broker, identity);
s_sendmore(broker, "");
s_send(broker, "reply1"); identity = s_recv(broker);
recvStr = s_recv(broker);
recvStr = s_recv(broker);
std::cout << recvStr << std::endl; s_sendmore(broker, identity);
s_sendmore(broker, "");
s_send(broker, "reply2"); }
} void DealerFunc()
{
zmq::context_t context();
zmq::socket_t worker(context, ZMQ_DEALER); worker.connect("tcp://localhost:5671"); while ()
{
s_sendmore(worker, "");
s_send(worker, "hello world1"); std::string recvStr = s_recv(worker);
recvStr = s_recv(worker);
std::cout << recvStr << std::endl; s_sendmore(worker, "");
s_send(worker, "hello world2"); recvStr = s_recv(worker);
recvStr = s_recv(worker);
std::cout << recvStr << std::endl;
}
} void TestRouterDealer()
{
std::thread routerThread = std::thread(RouterFunc);
std::thread dealerThread = std::thread(DealerFunc); routerThread.join();
dealerThread.join();
return;
} void RouterFun()
{
zmq::context_t context();
zmq::socket_t broker(context, ZMQ_ROUTER); broker.bind("tcp://*:5671");
while () {
std::string identity = s_recv(broker);
std::string recvStr = s_recv(broker);
recvStr = s_recv(broker);
std::cout << recvStr << std::endl; s_sendmore(broker, identity);
s_sendmore(broker, "");
s_send(broker, "Work harder1"); identity = s_recv(broker);
recvStr = s_recv(broker);
recvStr = s_recv(broker);
std::cout << recvStr << std::endl; s_sendmore(broker, identity);
s_sendmore(broker, "");
s_send(broker, "Work harder2");
}
} void ReqFun()
{
zmq::context_t context();
zmq::socket_t worker(context, ZMQ_REQ); s_set_id(worker, (intptr_t));
worker.connect("tcp://localhost:5671");
while ()
{
s_send(worker, "Hi Boss1");
std::string recvStr = s_recv(worker);
std::cout << recvStr << std::endl; s_send(worker, "Hi Boss2");
recvStr = s_recv(worker);
std::cout << recvStr << std::endl;
}
} void TestRouterReQ()
{
std::thread routerThread = std::thread(RouterFun);
std::thread reqThread = std::thread(ReqFun); routerThread.join();
reqThread.join();
return;
} int main()
{
//TestRouterDealer();
TestRouterReQ();
return ;
}

zeromq学习记录(九)练习代码学习ZMQ_ROUTER ZMQ_READLER的更多相关文章

  1. [转]Oracle学习记录 九 Prc C学习

    经过前面的了解,现在想用C语言来编程了,搜索了很多东西,后来决定先用Pro C来进行学习 在安装完Oracle数据库后就可以进行编程了,里面有一个命令proc就是对程序进行预编译的. 在这记一下,这是 ...

  2. Spring学习记录(九)---通过工厂方法配置bean

    1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...

  3. WebGPU学习(九):学习“fractalCube”示例

    大家好,本文学习Chrome->webgpu-samplers->fractalCube示例. 上一篇博文: WebGPU学习(八):学习"texturedCube"示 ...

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

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

  5. Redis学习记录及Jedis代码示例

    文章目录 二.Redis简介 三.Redis安装 1. 下载并解压安装 2. 安装C语言编译环境 3. 修改安装位置 4. 编译安装 5.启动Redis服务器 ①默认启动 ②定制配置项启动 [1]准备 ...

  6. GUI学习之九——QLineEdit的学习总结

    我们在前面学习了各种按钮控件,从这一章开始就是各种输入控件的学习. 首先要用的就是QLineEdit——单行编辑器, 一描述 QLineEdit是一个单行文本编辑器,允许用户输入和编辑单行纯文本.自带 ...

  7. 深度学习(九) 深度学习最全优化方法总结比较(SGD,Momentum,Nesterov Momentum,Adagrad,Adadelta,RMSprop,Adam)

    前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x(权重),使得f(x)的值最小. 本文以下内容假设读者已经了解机器学习基本知识,和梯度下降的原理. SGD SGD指stoc ...

  8. r-cnn学习(九):学习总结

    首先看下代码文件夹的说明(这部分转自:http://blog.csdn.net/bailufeiyan/article/details/50749694) tools 在tools文件夹中,是我们直接 ...

  9. Ansible学习记录五:PlayBook学习

    0.介绍 Playbooks 是 Ansible 管理配置.部署应用和编排的语言,可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等 类似于一组任务集,定义好像项目, ...

随机推荐

  1. 给idea添加类注释和方法注释模板

    这是我找到的最好的,最简单明白的一文: https://blog.csdn.net/xiaoliulang0324/article/details/79030752

  2. reids高可用(灾难备份-持久化)

    java缓存存放到内存之中,当服务器重启以后,内存的数据将丢失,而reids作为缓存,重启reids以后 数据是不是也会丢失,redis服务器重启以后数据也不会丢失,这个是redis提供了持久化的功能 ...

  3. [UE4]VR成像原理

    一.双眼成像原理 二.3D电影成像原理 模拟人眼.用2个摄像机拍摄,模拟人的左眼和右眼 播放的时候2个投影仪分别同时播放左右摄像机拍摄到内容,观众带上3D眼镜,左眼只能看到左摄像机的内容(过滤右摄像机 ...

  4. Core Graphices 获取上下文

    Core Graphices 获取上下文的三种方式: 1.自定义view 重写view 的 drawRect:(CGRect)rect方法 - (void)drawRect:(CGRect)rect ...

  5. systemverilog assertion

    1.一般是单独写一个module 里面放assertion,  然后在验证平台顶层和RTL的实例化bind起来​ 2. |->表示直接进行判断,|=>表示下一拍判断,一般一个断言最好只写一 ...

  6. 一个java使用redis的简单案例

    这个例子中,java使用Jedis来操作Redis 1.引入Jedis的依赖 <dependency> <groupId>redis.clients</groupId&g ...

  7. 关于offsetParent

    不知道有多少人知道JavaScript中有offsetParent这么个属性. 关于offsetParent,我最开始见到他,是在<JavaScript高级程序设计(第3版)>第321页, ...

  8. C# 操作符 << 与 >>

    1.<< 左移操作符: 左移操作符,将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0.左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8. 如:x< ...

  9. 关于h5使用bpmn.js

    bpmn.js网站地址:https://bpmn.io/toolkit/bpmn-js/ bpmnjs是一款工作流绘制框架,遵循了bpmn2.0规范,实现从前台绘制工作流到后台执行的效果. 图示: 但 ...

  10. 《算法导论》——矩阵乘法的Strassen算法

    前言: 很多朋友看到我写的<算法导论>系列,可能会觉得云里雾里,不知所云.这里我再次说明,本系列博文时配合<算法导论>一书,给出该书涉及的算法的c++实现.请结合<算法导 ...