ZeroMQ和NanoMSG的选择/对比
本文最后更新于 325 天前,其中的信息可能已经有所发展或是发生改变。

以前一直在使用ZeroMQ库处理通信,但因为最近需要做一个一对多的双向实时通信,ZeroMQ提供的几种通信模式就难以很好地实现,于是就去寻找其他的库,比如NanoMsg库。

在我实际使用中,这两个库有着很大不同,下面我列出几点我使用时最注意的几点,之后如有新的理解再更新。

按照官方的说明,NanoMsg相当于ZeroMQ的改进升级版。

官方对两者的比较说明:Differences between nanomsg and ZeroMQ,CSDN上译文:[译]nanomsg和ZeroMQ的区别

外网博客:A Look at Nanomsg and Scalability Protocols (Why ZeroMQ Shouldn’t Be Your First Choice),本站转载译文:【转载】谈谈Nanomsg和可扩展性协议(为什么ZeroMQ不应该是你的首选)

  1. 性能方面,我没细致测试,同种情况的实时通信延迟相差不大,性能相差甚微。

  2. ZMQ使用C++编写,而NanoMsg是用C。NanoMsg在内存分配、移植性等地方更佳,但也因此难读懂源码。

    作者自述:Why should I have written ZeroMQ in C, not C++

  3. NanoMsg与ZMQ的缓存使用不一样,最直接的区别是,NanoMsg在传输大文件时需要手动设置更大的接受缓存。

  4. API使用差不多,但NanoMsg取消了ZMQ的上下文机制,使用更加简洁。

    ZeroMQ nanomsg
    zmq_socket nn_socket
    zmq_bind nn_bind
    zmq_connect nn_connect
    zmq_send nn_send
    zmq_recv nn_recv
    zmq_close nn_close
    zmq_ctx_new
    zmq_ctx_destroy
  5. 最重要的是NanoMsg增加很多通信模式,这一点是我选择NanoMsg的重要原因。关于这两个库的各种通信模式我之后再写篇文章细细讲讲。

    如果要实现一对多通信,ZMQ使用Request-Reply (请求-应答) 模式一连多时,数据是轮流发送,不是一份数据发送多份, Publish-Subscribe (发布-订阅) 模式则不支持回应。而NanoMsg新增了BUS模式和SURVEY模式:

    • BUS (总线)模式实现多个节点之间的广播通信。每个节点可以发送和接收消息,消息是在一个BUS(总线)里,即节点发送的信息其他节点都能接收到。
    • SURVEY (调查/投票)模式允许一个节点向多个节点发送调查消息,并收集所有的回应,适用于需要从多个节点收集信息或进行投票的场景。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇