ZeroMQ使用汇总
服务端使用流程:
void* m_Context;
void* m_sktMsgVideoFrame; m_sktMsgVideoFrame = zmq_socket(m_Context,ZMQ_PUB);
int ret = zmq_bind(m_sktMsgVideoFrame,bytesMsgVideoFrameAddress.data()); zmq_msg_t msg; zmq_msg_init_size(&msg,frameBuffSize+MIN_MSG_LEN);
memcpy(zmq_msg_data(&msg),MSG_VIDEO_FRAME,5); memcpy((char*)zmq_msg_data(&msg)+5, frameBuff, frameBuffSize); // int iRet = zmq_msg_send(&msg, (zmq_msg_t*)m_sktMsgVideoFrame, 0); zmq_msg_close(&msg); zmq_close(m_sktMsgVideoFrame);
zmq_ctx_shutdown(m_Context);
客户端流程:
QByteArray bytesMsgControlAddress = g_strMsgControlAddress.toUtf8();
QByteArray bytesMsgReqCaptureRetAddress = g_strMsgReqCaptureRetAddress.toUtf8();
QByteArray bytesMsgVideoFrameAddress = g_strMsgVideoFrameAddress.toUtf8(); void* context = zmq_ctx_new(); void* m_pSktMsgControl = zmq_socket(context, ZMQ_SUB);
int ret = zmq_connect(m_pSktMsgControl,bytesMsgControlAddress.data());
qDebug()<<"MSG_CONTROL PULL 连接地址:"<<g_strMsgControlAddress;
qDebug()<<"MSG_CONTROL PULL 连接结果:"<<ret;
ret = zmq_setsockopt(m_pSktMsgControl, ZMQ_SUBSCRIBE, "", );/// 必须添加该语句对消息滤波,否则接受不到消息 void* m_pSktMsgReqCaptureRet = zmq_socket(context, ZMQ_SUB);
ret = zmq_connect(m_pSktMsgReqCaptureRet, bytesMsgReqCaptureRetAddress.data());
qDebug()<<"MSG_REQ_CAPUTRE_RET PULL 连接地址:"<<g_strMsgReqCaptureRetAddress;
qDebug()<<"MSG_REQ_CAPUTRE_RET PULL 连接结果:"<<ret; ret = zmq_setsockopt(m_pSktMsgReqCaptureRet, ZMQ_SUBSCRIBE, "", );/// 必须添加该语句对消息滤波,否则接受不到消息 void* m_pSktVideoFrame = zmq_socket(context, ZMQ_SUB);
ret = zmq_connect(m_pSktVideoFrame, bytesMsgVideoFrameAddress.data()); qDebug()<<"MSG_VIDEO_FRAME PULL 连接地址:"<<g_strMsgVideoFrameAddress;
qDebug()<<"MSG_VIDEO_FRAME PULL 连接结果:"<<ret; ret = zmq_setsockopt(m_pSktVideoFrame, ZMQ_SUBSCRIBE, "", );/// 必须添加该语句对消息滤波,否则接受不到消息 while (true)
{
//一直监听来自其他模块的PUSH消息,采用非阻塞模式
zmq_msg_t msg;
int responseLen = zmq_msg_init(&msg);
responseLen = zmq_msg_recv(&msg,receiver, ZMQ_DONTWAIT);
if(responseLen<MIN_MSG_LEN)
{
//qDebug()<<"收到消息长度小于最小消息长度,本次消息无效.";
zmq_msg_close(&msg);
return;
} BYTE* pStr = (BYTE*)malloc(responseLen);
memcpy(pStr, zmq_msg_data(&msg), responseLen); char head[MIN_MSG_LEN+] = {};
memcpy(head, pStr, MIN_MSG_LEN); QString headStr = QString::fromUtf8(head);
if (headStr.indexOf(MSG_GPS) != -)
{
//dosomething.....
} zmq_msg_close(&msg); QThread::msleep();
} zmq_close(m_pSktMsgControl);
zmq_close(m_pSktMsgReqCaptureRet);
zmq_close(m_pSktVideoFrame); zmq_ctx_shutdown(context);
ZeroMQ使用汇总的更多相关文章
- [转]RabbitMQ,ActiveMQ,ZeroMQ,Kafka之间的比较与资料汇总
MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部 ...
- [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...
- 死亡的协议--- Pieter Hintjens (ZeroMQ作者)
过去几年中用zeromq写过几个系统系统.对ZeroMQ强大和灵活印象非常深刻.在阅读zeromq guide文档时候.发现作者整理各种通信模式非常经典和实用,可以作为分布式通信的教科书来看.第一次见 ...
- Python资源汇总
Python 目录: 管理面板 算法和设计模式 反垃圾邮件 资产管理 音频 验证 构建工具 缓存 ChatOps工具 CMS 代码分析和Linter 命令行工具 兼容性 计算机视觉 并发和并行性 组态 ...
- 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
作者:大数据女神-诺蓝(微信公号:dashujunvshen).本文是36大数据专稿,转载必须标明来源36大数据. 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要 ...
- php ZeroMQ 的使用
一.ZeroMQ简介 ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 Socket Library,他使得 Socket 编程更加简单.简洁和性能更高.是一个消息 ...
- 消息队列ZeroMQ
消息队列概念 消息队列技术是分布式应用间交换信息的一种技术.消息队列可以驻留在内存或者磁盘上,队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可以独立的执行,它们不需要知道彼此的位置,或者在 ...
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
随机推荐
- [Objective-C] id类型和instancetype类型
前些时间在源码里看到instancetype返回类型,一脸惊异,表示接触iOS不久没见过这东西,但发现跟id功能差不多.故查了一些资料,了解了两者之间的区别,故将资料简单翻译整理了一下,为博客充一个数 ...
- Windows10系统的Linux子系统中安装MySQL数据库心得
后端开发童鞋们, 自己开发机用的是Windows系统电脑(台式机或笔记本), 而开发的程序和使用的数据库等要运行在Linux服务器上, 这种情况有木有? 提前声明: 本文并不讨论操作系统的比较, 以及 ...
- windows下安装并启动hadoop2.7.2
64位windows安装hadoop没必要倒腾Cygwin,直接解压官网下载hadoop安装包到本地->最小化配置4个基本文件->执行1条启动命令->完事.一个前提是你的电脑上已经安 ...
- LeetCode题解之Contains Duplicate II
1.题目描述 2.题目分析 使用哈希表 和分情况讨论的方法 3.代码 bool containsNearbyDuplicate(vector<int>& nums, int k) ...
- mysql 内存统计
在 mysql 5.5 中实现了类似mysql5.7中performance schema 的内存统计功能. 功能 1 展示mysql层内存总大小. 2 展示mysql层内存使用分布情况. 3 展示每 ...
- Remove Rar Password OnLine
How to Remove Rar passwords without any software : One of the most frustrating thing in our digital ...
- kettle 启动spoon一闪而过
Kettle是Pentaho的一个组件,主要用于数据库间的数据迁移(ETL). Kettle有三个主要组件:Spoon,Kitchen,Pan.其中Spoon是一个图形化的界面. 一.安装kettle ...
- 解决:Host xxx.xxx.xxx.xxx is blocked because of many connection errors.
Host "xxx.xxx.xxx.xxx" is blocked because of many connection errors 1.原因:当使用错误的密码连接mysql时, ...
- 《Effective C++》 目录:
转自:http://blog.csdn.net/KangRoger/article/details/44706403 目录 条款1:视C++为一个语言联邦 条款2:尽量以const.enum.inli ...
- 使用JavaScript实现简单的小游戏-贪吃蛇
最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...