/**************************************************************
技术博客
http://www.cnblogs.com/itdef/
 
技术交流群
群号码:324164944
 
欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/
 
zeromq 指南里第三个例子
 
socket在代码中标记为ZMQ_PULL ZMQ_PUSH
// 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的更多相关文章

  1. JavaScript学习记录三

    title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  2. 3.VUE前端框架学习记录三:Vue组件化编码1

    VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  3. zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP

    阅读zeromq guide的一些学习记录 zeromq官方例子 在VC下运行会有些跨平台的错误 我这里有做修改 稍后会发布出来 相关的代码与库  http://download.zeromq.org ...

  4. leveldb 学习记录(三) MemTable 与 Immutable Memtable

    前文: leveldb 学习记录(一) skiplist leveldb 学习记录(二) Slice 存储格式: leveldb数据在内存中以 Memtable存储(核心结构是skiplist 已介绍 ...

  5. webrtc学习———记录三:mediaStreamTrack

    参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...

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

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

  7. 下页小希学MVC5+EF6.2 学习记录三

      目的:1 学习mvc+ef 2  写下日记也是对自己的督促 期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型 ...

  8. ES6深入学习记录(三)编程风格

    今天学习阮一峰ES6编程风格,其中探讨了如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 v ...

  9. 定时任务调度工作(学习记录 三)timer其他重要函数

    TimerTask的两个重要函数: 1.cancel() 作用: 取消当前TimerTask里的任务 演示: 先在继承了TimerTask的类中添加一个计时器,然后在run方法中合适的位置添加canc ...

随机推荐

  1. super超类继承特点小结

    super超类继承特点小结: 1. super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,产生了一个super对象: 2. super类的初始化函 ...

  2. 几种不同格式的json解析

    原文地址:http://blog.csdn.net/whx405831799/article/details/42171191 给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是 ...

  3. SAS PROC PRINT 常用选项和语句说明

    常用选项1.使用选项OBS=修改观测序号标签2.使用NOOBS选项不显示观测序号列3.使用ID语句在输出中取代观测序号列4.使用VAR选择输出的变量5.使用WHERE语句选择输出的观测6.使用数据集选 ...

  4. HTML/CSS基础知识(四)

    WEB标准和W3C的理解与认识 Web标准是一系列标准的集合. 网页主要由三部分组成:结构(Structure).表现(Presentation)和行为(Behavior). 对应的标准也分三方面:结 ...

  5. 关于java和jvm的思考

    1. 多线程并发访问一个静态方法(static method)会不会有什么性能影响? 思考:不会,原因是static method编译后及时一串指令(jvm中的静态方法区,也叫non-heap(包含了 ...

  6. PHP常用的转义函数

    1. addslashes addslashes对SQL语句中的特殊字符进行转义操作,包括(‘), (“), (), (NUL)四个字符,此函数在DBMS没有自己的转义函数时候使用,但是如果DBMS有 ...

  7. [python,2018-03-06] python中的继承顺序

    python 支持多继承,但对与经典类和新式类来说,多继承查找的顺序是不一样的.  经典类: 新式类   class P1:      def foo(self):                   ...

  8. 【Linux】【Jenkins】代码编译和执行过程中的问题汇总

    1.问题1:java.io.FileNotFoundException: /root/.jenkins/workspace/Videoyi_AutoTest_Maven/config-log4j\lo ...

  9. HTML-全局属性 / 事件属性(转)

    拷贝自:< http://www.runoob.com > HTML 全局属性 New : HTML5 新属性. 属性 描述 accesskey 设置访问元素的键盘快捷键. class 规 ...

  10. mysql 乐观锁实现

    一.为什么需要锁(并发控制)?      在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题.      典型的冲突有:        1.丢失更新:一个事 ...