# ZeroMQ vs. other transport protocols (such as nanomsg)?

**URL:** <https://discourse.julialang.org/t/zeromq-vs-other-transport-protocols-such-as-nanomsg/2136>\
**Category:** General Usage\
**Tags:** networking\
**Created:** [February 14, 2017, 6:52pm UTC](https://discourse.julialang.org/t/zeromq-vs-other-transport-protocols-such-as-nanomsg/2136 "2017-02-14T18:52:13Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [February 14, 2017, 6:52pm UTC](https://discourse.julialang.org/t/zeromq-vs-other-transport-protocols-such-as-nanomsg/2136/1 "2017-02-14T18:52:13Z")

</div>

> [@Networked REPL?](https://discourse.julialang.org/t/networked-repl/2085/7):
>
> Transport is ZeroMQ. In an ideal world, transport would be pluggable. In the real world, ZeroMQ is as close to ideal as one can get. (In case it’s not clear, I’m a huge fan of ZeroMQ.)

I’m interested in your opinion on ZMQ vs. other things such as nanomsg - we are currently also using ZeroMQ for communications in Julia (with our own wrapper), but one of the people at my company is concerned because the main person behind ZMQ has died, and apparently not much has been happening with ZMQ since.

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [February 16, 2017, 12:39am UTC](https://discourse.julialang.org/t/zeromq-vs-other-transport-protocols-such-as-nanomsg/2136/2 "2017-02-16T00:39:57Z")

</div>

> **[nanomsg postmortem and other stories](https://sealedabstract.com/rants/nanomsg-postmortem-and-other-stories/)**
>
> Update: In the two years since I wrote this, Garrett has taken over the project and disputes a lot of things in this post. You can read his point of view here nanomsg was a once-bright alternative …

---

<div class="post-metadata">

**Author:** ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)\
**Post date:** [February 16, 2017, 11:41am UTC](https://discourse.julialang.org/t/zeromq-vs-other-transport-protocols-such-as-nanomsg/2136/3 "2017-02-16T11:41:04Z")

</div>

Thanks for the info - I’ve passed that on to Maarten (who wrote our ZeroMQ wrapper for Julia, asked me about possible better alternatives for Julia, and sent me the link [Differences between nanomsg and ZeroMQ](http://nanomsg.org/documentation-zeromq.html)).  
Maybe this topic should be split - I’m still interested in whether ZeroMQ (given LGPL, C++ API, etc.) is still the best transport protocol for Julia, whether for networked REPL or services to communicate amongst themselves, or whether people feel there are now better alternatives (besides nanomsg, it seems).

---

<div class="post-metadata">

**Author:** ![jballanc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jballanc/32/328_2.png) [@jballanc](https://discourse.julialang.org/u/jballanc)\
**Post date:** [February 20, 2017, 1:15am UTC](https://discourse.julialang.org/t/zeromq-vs-other-transport-protocols-such-as-nanomsg/2136/4 "2017-02-20T01:15:52Z")

</div>

I can anecdotally echo the same sentiments as @StefanKarpinski with respect to nanomsg and other ZeroMQ alternatives being, for all intents and purposes, technological dead-ends. There are alternative transports, but they all exist at slightly different layers than ZeroMQ. For example, AMQP, STOMP, ActiveMQ, etc. provide message distribution semantics that can be implemented in ZeroMQ, but all require significantly more supporting infrastructure than ZeroMQ (or have other limitations such as being JVM-only).

In my experience, ZeroMQ has really found a sweet-spot between raw TCP/UDP and application messaging protocols. The ZeroMQ protocol has also been extensively documented and there is a robust RFC process in place for reviewing and accepting changes to it. Speaking of which, before he died, Pieter Hintjens created the [“Collective Code Construction Contract”](https://rfc.zeromq.org/spec:22/C4/) to guide future ZeroMQ development in his absence.

If there’s any appearance of a decrease in activity around ZeroMQ development, I think that reflects more the fact that it is maturing as a protocol and less that it is becoming, in any way, irrelevant…at least, that’s been my experience.

---

<div class="post-metadata">

**Author:** ![sairus7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sairus7/32/10816_2.png) [@sairus7](https://discourse.julialang.org/u/sairus7)\
**Post date:** [December 12, 2019, 12:38am UTC](https://discourse.julialang.org/t/zeromq-vs-other-transport-protocols-such-as-nanomsg/2136/5 "2019-12-12T00:38:54Z")

</div>

There is an update to nanomsg library status - a complete rewrite of the core library has been released – [NNG](http://garrett.damore.org/2018/05/no-nanomsg-is-not-dead.html).

Latest release: [Releases · nanomsg/nng · GitHub](https://github.com/nanomsg/nng/releases)

Found a presenatation about it in this post:

> [@Realtime streaming of tick data](https://discourse.julialang.org/t/realtime-streaming-of-tick-data/5713/9):
>
> [Here](https://staysail.github.io/nng_presentation/nng_presentation.html) is something interesting to read. Concerning to the performance and system architecture (for your HFT sys I guess), choosing a proper MQ could be important, but may not so critical at the very beginning, because you can always switch to or “plug into” a different MQ sys if you carefully designed the interface.
