zeromq学习记录(九)联系代码学习ZMQ_ROUTER ZMQ_READLER

/**************************************************************

技术博客

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(1);
    zmq::socket_t broker(context, ZMQ_ROUTER);
    broker.bind("tcp://*:5671");

    while (1)
    {
        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(1);
    zmq::socket_t worker(context, ZMQ_DEALER);

    worker.connect("tcp://localhost:5671");

    while (1)
    {
        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(1);
    zmq::socket_t broker(context, ZMQ_ROUTER);

    broker.bind("tcp://*:5671");
    while (1) {
        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(1);
    zmq::socket_t worker(context, ZMQ_REQ);

    s_set_id(worker, (intptr_t)3);
    worker.connect("tcp://localhost:5671");
    while (1)
    {
        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 0;
}

时间: 2024-12-28 09:06:50

zeromq学习记录(九)联系代码学习ZMQ_ROUTER ZMQ_READLER的相关文章

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

经过前面的了解,现在想用C语言来编程了,搜索了很多东西,后来决定先用Pro C来进行学习 在安装完Oracle数据库后就可以进行编程了,里面有一个命令proc就是对程序进行预编译的. 在这记一下,这是一个学习PL/SQL的网站,挺好的 http://www.cnblogs.com/huyong/archive/2012/07/30/2614563.html 创建用户是 create user xx identified by xx account unlock; grant connect, r

Oracle学习记录 九 Prc C学习

经过前面的了解,现在想用C语言来编程了,搜索了很多东西,后来决定先用Pro C来进行学习 在安装完Oracle数据库后就可以进行编程了,里面有一个命令proc就是对程序进行预编译的. 写一个test.pc然后 proc iname=test.pc oname=test.c 但是我这怎么也不行,一直出问题 后来我用 proc PARSE=NONE CODE=KR_C LINE=YES INAME=test.pc MODE=ORACLE DBMS=V8 UNSAFE_NULL=YES 这下才生成了t

webpack学习记录(九)-小插件应用

webpack学习记录(九)-小插件应用 clean-webpack-plugin 每次输出之前先删除之前的目录,即每次输出都是最新的打包文件 安装及配置 npm i clean-webpack-plugin -D // 注意该插件引入方式需要用解构赋值才有效 const {CleanWebpackPlugin} = require('clean-webpack-plugin') module.exports = { plugins: [ new CleanWebpackPlugin() ] }

分享《自然语言处理理论与实战》PDF及代码+唐聃+《深入浅出Python机器学习》PDF及代码+段小手+《深度学习实践:计算机视觉》PDF+缪鹏+《最优化理论与算法第2版》高清PDF+习题解答PDF+《推荐系统与深度学习》PDF及代码学习

<自然语言处理理论与实战>高清PDF,362页,带书签目录,文字可以复制:配套源代码.唐聃等著. <大数据智能互联网时代的机器学习和自然语言处理技术>PDF,293页,带书签目录,文字可以复制,彩色配图.刘知远等著.  下载: https://pan.baidu.com/s/1waP6C086-32_Lv0Du3BbNw 提取码: 1ctr <自然语言处理理论与实战>讲述自然语言处理相关学科知识和理论基础,并介绍使用这些知识的应用和工具,以及如何在实际环境中使用它们.由

Oracle学习记录 六 又一本学习资料练习

学习过最简单的几种语句了,也安装过了几次数据库,本来在看那个高级编程的,但是还有一本入门的没看,就先看了再说, 多练习,熟悉掌握最基本的操作. 我以前登录的时候都是用conn回车,然后再输入密码,这个文档第一个就介绍了另一种登录方法. conn scott/xx 这样就直接登录了,/前是用户名,/后是密码 conn sys/xx as sysdba 这个就是用管理员登录 2. 然后是把刚才输入的sql保存成文件用.sql后缀 select * from emp; save /home/oracl

Ansible学习记录五:PlayBook学习

0.介绍 Playbooks 是 Ansible 管理配置.部署应用和编排的语言,可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等 类似于一组任务集,定义好像项目,组织结构,配置文件等信息,通过task将所要做的事情一步一步的组织在一起就是完整的Playbook 官方Demo资料:https://github.com/ansible/ansible-examples Playbooks是采用YMAL语言结构,基础语法请参考:http://docs.ansibl

Oracle学习记录 十 高级分组学习

group by cube 先执行一个语句看一下: select deptno, job, sum(sal) sal from emp group by cube(deptno, job) order by sal; 这个输出结果可以看到,有deptno为空的,有job为空的,还有都为空的,当然还有两者都有的. http://honeybinshun.iteye.com/blog/1474242 先对deptno,job进行group by 这个就是两者都有的那些项,然后对deptno进行gro

webrtc学习———记录二:canvas学习

参考资料: http://bucephalus.org/text/CanvasHandbook/CanvasHandbook.html#getcontext2d https://developer.mozilla.org/zh-CN/docs/Web/HTML/Canvas http://www.w3school.com.cn/html5/html5_canvas.asp https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasEle

KMP算法学习记录----Jake Boxer博文学习部分

如需转载,请保留本文链接. Jake Boxer 英文博文链接:http://jakeboxer.com/blog/2009/12/13/the-knuth-morris-pratt-algorithm-in-my-own-words/ 如何使用部分匹配表 1.作用:使用部分匹配表跳过那些已经做过的,旧的比较部分,从非重复匹配部分开始. 2.if(匹配表结果大于1) { 允许跳过的字符数量 = 匹配长度 - 部分匹配表[匹配长度-1]; } else { 允许跳过的字符数量 =  部分匹配表[匹