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- ...
随机推荐
- Asp.Net Core Docker镜像更新系统从wheezy改为stretch
之前写过一个在Asp.Net Core里调用System.Drawing.Common绘图的DEMO,部署到Docker里运行,需要更新Asp.Net Core镜像的操作系统. https://www ...
- MySQL 8.0.2: Introducing Window Functions
July 18, 2017MySQL, SQLDag Wanvik MySQL 8.0.2 introduces SQL window functions, or analytic functions ...
- VMware 导出镜像文件供 Virtual Box 使用
1. 问题描述 Windows 系统安装的 VMware 里的安装配置好的虚拟机需要拷贝到 MAC 的 Virtual Box 中. 需要将 VMware 中的虚拟机导出为镜像文件供 Virtual ...
- javascript,object,IDispatchEx笔记
//js: var testObj=new Object; //com内部: testObj=Object::InvokeEx(wFlags==DISPATCH_CONSTRUCT); //注: // ...
- window与Linux之间的文件传输
使用工具:WinSCP WinSCP可以直接通过SSH链接你的linux服务器:然后进行文件的复制操作:并且可以直接编辑文件. 1.下载WinSCP 2.登录WinSCP,输入你的Linux 的IP地 ...
- Netty入门(一)环境搭建及使用
一.项目创建 在 Eclipse 中右键,新建->项目->Maven->Maven Project->下一步->选择 quickstart 下一步->设置如图(参数 ...
- Android--------TabLayout实现新闻客户端顶部导航栏
APP市场中大多数新闻App都有导航菜单,导航菜单是一组标签的集合,在新闻客户端中,每个标签标示一个新闻类别,对应下面ViewPager控件的一个分页面,今日头条, 网易新闻等. 随着版本迭代的更新, ...
- 【转】 最新版chrome谷歌浏览器Ajax跨域调试问题
Ajax本身是不支持跨域的,而我们在开发工作中,可能会遇到本地开发环境未配置相关代码,需要到其他服务器上获取数据的情况,尤其在用HTML5开发app的过程中,前后台完全分离,使用Ajax进行数据交互, ...
- python 安装opencv 安装pycocotools
pip3 install opencv-python https://blog.csdn.net/lsh894609937/article/details/72841359 pip3 install ...
- django博客项目-设置django为中文语言
找到项目级别里面的setting文件,修改如下配置 """ LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' & ...