ZeroMQ简单介绍

Posted randyniu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZeroMQ简单介绍相关的知识,希望对你有一定的参考价值。

ZeroMQ中的字符串是指定长度的,也就是不会向C语言中一样,使用0作为最后的字符串的表示。因此,当接受字符串数据的时候是纯净的字符串数据,需要你自己处理字符串结尾的工作。

ZeroMQ应用程序总是创建一个上下文开始,然后用它来创建套接字。应该在进程中只创建并使用一个上下文。上下文是单个进程中所有套接字的容器,并充当了inproc套接字的传输工具。

在主代码开始执行一个zmq_ctx_new(),在代码最后执行一个zmq_ctx_destory()。如果套接字没有关闭,则zmq_ctx_destory函数将一直挂起,即使关闭了所有的套接字,如果有悬而未决的连接或者发送,zmq_ctx_destory也将等待下去,除非你在关闭这些套接字之前将linger设置为0.

消息对象 套接字 上下文共同组成了ZeroMQ对象。 处理完消息的那一刻,总是用zmq_msg_close()关闭它。

当你退出程序的时候,关闭你的套接字,然后调用zmq_ctx_destory()销毁上下文。

不要在多线程中使用同一个套接字,记住不要这样做。

关闭每个有持续请求的套接字 首先设置一个低的linger值,然后关闭套接字。

最后是销毁上下文,这将导致连接到的线程的阻塞的接受或者是发送都将返回一个错误,捕获该错误,然后在该线程中设置linger,关闭套接字并退出,不要多次销毁同样的上下文,在主线程中的zmq_ctx_destory调用将会保持阻塞,直到它直到的所有套接字都已经安全的关闭了。

ZeroMQ的特点

在后台线程异步处理IO,这些线程使用无锁数据结构与应用程序线程进行通讯,所以并发应用程序不需要锁,信号量,

组件可以动态的来去自如,而zeromq会自动的重新连接,这意味着你可以在任何顺序启动组件,可以SOA 面向服务的架构,其中的服务可以在任何时间加入和离开网络。

自动对消息排队。

有一个处理队列过满的方法,当队列满的时候,会自动阻止发件人或者丢弃消息,这取决于你是哪一种模式(这两种模式就是TCP和UDP)

可以让应用程序通过任何的传输协议来互相交流,这些协议可以是TCP、多播、进程内,进程间

它使用依赖消息传递模式的不同策略,安全的处理速度满,阻塞的读取者。

可以采用多种模式,请求应答,发布订阅来将消息路由,

可以创建代理来排队、转发、或者通过一个调用来捕获消息。

使用在线路上原封不动的帧来传递整个消息。如果你写了10K的消息数据,你讲获得10K的消息数据

不对消息加强任何格式,是二进制对象,

可以智能的处理网络错误,有时候会重试。

可以减少能源的消耗,等等等等

 

以上是关于ZeroMQ简单介绍的主要内容,如果未能解决你的问题,请参考以下文章

ZeroMQ 教程 002 : 高级技巧

消息队列服务对比

使用ZeroMq源测试Kuiper吞吐量

消息队列及常见消息队列介绍

C++跨平台:ZeroMQ的简单示例

C++跨平台:ZeroMQ的简单示例