zeromq学习记录(三)使用ZMQ_PULL ZMQ_PUSH
/**************************************************************技术博客http://www.cnblogs.com/itdef/技术交流群群号码:324164944欢迎c c++ windows驱动爱好者 服务器程序员沟通交流**************************************************************/
// taskvent_cpp.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
//
// Task ventilator in C++
// Binds PUSH socket to tcp://localhost:5557
// Sends batch of tasks to workers via that socket
//
// Olivier Chamoux <olivier.chamoux@fr.thalesgroup.com>
//
#include <zhelpers.hpp>
#include <zmq.hpp>
#include <stdlib.h>
#include <stdio.h>
#include <iostream> int main(int argc, char *argv[])
{
zmq::context_t context(); // Socket to send messages on
zmq::socket_t sender(context, ZMQ_PUSH);
sender.bind("tcp://*:5557"); std::cout << "Press Enter when the workers are ready: " << std::endl;
getchar();
std::cout << "Sending tasks to workers…\n" << std::endl; // The first message is "0" and signals start of batch
zmq::socket_t sink(context, ZMQ_PUSH);
sink.connect("tcp://localhost:5558");
zmq::message_t message();
memcpy(message.data(), "", );
sink.send(message); // Initialize random number generator
srandom((unsigned)time(NULL)); // Send 100 tasks
int task_nbr;
int total_msec = ; // Total expected cost in msecs
for (task_nbr = ; task_nbr < ; task_nbr++) {
int workload;
// Random workload from 1 to 100msecs
workload = within() + ;
total_msec += workload; message.rebuild();
memset(message.data(), '\0', );
sprintf((char *)message.data(), "%d", workload);
sender.send(message);
}
std::cout << "Total expected cost: " << total_msec << " msec" << std::endl;
Sleep(); // Give 0MQ time to deliver
getchar();
return ;
}
// taskwork_cpp.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "zhelpers.hpp"
#include <string> int main(int argc, char *argv[])
{
zmq::context_t context(); // Socket to receive messages on
zmq::socket_t receiver(context, ZMQ_PULL);
receiver.connect("tcp://localhost:5557"); // Socket to send messages to
zmq::socket_t sender(context, ZMQ_PUSH);
sender.connect("tcp://localhost:5558"); // Process tasks forever
while () { zmq::message_t message;
int workload; // Workload in msecs receiver.recv(&message);
std::string smessage(static_cast<char*>(message.data()), message.size()); std::istringstream iss(smessage);
iss >> workload; // Do the work
s_sleep(workload); // Send results to sink
message.rebuild();
sender.send(message); // Simple progress indicator for the viewer
std::cout << "." << std::flush;
}
getchar();
return ;
}
// tasksink_cpp.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
//
// Task sink in C++
// Binds PULL socket to tcp://localhost:5558
// Collects results from workers via that socket
//
// Olivier Chamoux <olivier.chamoux@fr.thalesgroup.com>
//
//#include <zmq.hpp>
#include <time.h>
#include "zhelpers.hpp"
//#include <sys/time.h>
#include <iostream> int main(int argc, char *argv[])
{
// Prepare our context and socket
zmq::context_t context();
zmq::socket_t receiver(context, ZMQ_PULL);
receiver.bind("tcp://*:5558"); // Wait for start of batch
zmq::message_t message;
receiver.recv(&message); // Start our clock now
struct timeval tstart;
win_gettimeofday(&tstart); // Process 100 confirmations
int task_nbr;
int total_msec = ; // Total calculated cost in msecs
for (task_nbr = ; task_nbr < ; task_nbr++) { receiver.recv(&message);
if ((task_nbr / ) * == task_nbr)
std::cout << ":" << std::flush;
else
std::cout << "." << std::flush;
}
// Calculate and report duration of batch
struct timeval tend, tdiff;
win_gettimeofday(&tend); if (tend.tv_usec < tstart.tv_usec) {
tdiff.tv_sec = tend.tv_sec - tstart.tv_sec - ;
tdiff.tv_usec = + tend.tv_usec - tstart.tv_usec;
}
else {
tdiff.tv_sec = tend.tv_sec - tstart.tv_sec;
tdiff.tv_usec = tend.tv_usec - tstart.tv_usec;
}
total_msec = tdiff.tv_sec * + tdiff.tv_usec / ;
std::cout << "\nTotal elapsed time: " << total_msec << " msec\n" << std::endl;
getchar();
return ;
}
zeromq学习记录(三)使用ZMQ_PULL ZMQ_PUSH的更多相关文章
- JavaScript学习记录三
title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- 3.VUE前端框架学习记录三:Vue组件化编码1
VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
- zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP
阅读zeromq guide的一些学习记录 zeromq官方例子 在VC下运行会有些跨平台的错误 我这里有做修改 稍后会发布出来 相关的代码与库 http://download.zeromq.org ...
- leveldb 学习记录(三) MemTable 与 Immutable Memtable
前文: leveldb 学习记录(一) skiplist leveldb 学习记录(二) Slice 存储格式: leveldb数据在内存中以 Memtable存储(核心结构是skiplist 已介绍 ...
- webrtc学习———记录三:mediaStreamTrack
参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...
- zeromq学习记录(六)C语言示例
考虑到官方的示例c语言是最多的 官方未使用C++语言演示的例子就使用VC编译C语言例子 记录在此 /************************************************** ...
- 下页小希学MVC5+EF6.2 学习记录三
目的:1 学习mvc+ef 2 写下日记也是对自己的督促 期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型 ...
- ES6深入学习记录(三)编程风格
今天学习阮一峰ES6编程风格,其中探讨了如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 v ...
- 定时任务调度工作(学习记录 三)timer其他重要函数
TimerTask的两个重要函数: 1.cancel() 作用: 取消当前TimerTask里的任务 演示: 先在继承了TimerTask的类中添加一个计时器,然后在run方法中合适的位置添加canc ...
随机推荐
- windows7 64位安装tensorflow 1.4.0 CPU版本
机器学习和深度学习真是新生代的宠儿,我也被安排来搞这个了,这下是真的从0开始了.看了几天ppt,想跑跑代码试试,装个环境. 都说tensorflow很火很好用,反正我什么也不懂,准备把这些框架一个一个 ...
- linux 磁盘 扩展分区
- DokuWiki 插件使用
本身DokuWiki提供了一些公共,但是不是很强大,所以可以安装一些插件. 安装方法可以参考:https://www.dokuwiki.org/extensions 下面列举出我觉得好用的一些插件: ...
- python读取指定字节长度的文本
软件版本 Python 2.7.13; Win 10 场景描述 1.使用python读取指定长度的文本: 2.使用python读取某一范围内的文本. Python代码 test.txt文本内包含的 ...
- cookie.js插件
/*! cookiejs v1.0.23 | MIT (c) 2018 kenny wong | https://github.com/jaywcjlove/cookie.js */!function ...
- ros有一个比较安全的登录方案:二次登录防火墙
原文: https://www.winbox.org/ /ip firewall address-list add address=10.0.0.0/8 list=login /ip firewall ...
- python学习笔记之三-计算运行时间
方法1 import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.no ...
- 用GDB调试程序(七)
改变程序的执行——————— 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的 ...
- centos下安装djangobb
曾经在freenas虚拟环境下安装过djangobb,因为要安装的依赖文件太多,最后没有安装成功. 今晚在centos6.9 下,先创建了虚拟环境,然后照着官方网站的快速安装指南,安装后也运行不了,后 ...
- ARM中R0-R15寄存器的作用
根据“ARM-thumb 过程调用标准”: 注意:在中断程序中,所有的寄存器都必须保护,编译器会自动保护R4-R11