NetMQ vs clrzmq

时间:2016-07-31 10:09:02

标签: zeromq netmq

几个月前,我选择用于实现ZeroMQ通信的.NET库,我对zeromq.org建议的库很少这一事实感到非常困惑。

与此同时,我学到了很多东西,所以我会在这里分享。有人可能会觉得这很有帮助。所以让我问自己:

NetMQ和clrzmq有什么区别?

(虽然我自己会回答这个问题,如果其他人对这个问题有一些经验 - 欢迎另外的答案!)

2 个答案:

答案 0 :(得分:8)

两者之间的关键区别在于方法:

  • CLRZMQ是绑定项目,实际上在后台使用libzmq库(它是libzmq库的.NET包装器);
  • NetMQ是ZeroMQ的.NET本地端口,这意味着它不会包装现有的libzmq,但会在纯C#中重写它

使用哪一个?嗯,没有简单的答案。在选择时,请记住以下几点:

  • 说到可移植性 - NetMQ到目前为止胜出,特别是因为有NetMQ的.NET核心版本。使用NetMQ可以更轻松地部署 - 没有本地库需要担心(x64 / x86等)。
  • 另一方面,NetMQ实际上重写了所有内容这一事实对我来说有点吓人 - 总是存在一些风险,即某些内容未能从原始代码中精确镜像,并且可能导致与其他ZeroMQ节点不兼容。还有人质疑NetMQ将如何快速实现原始库中的新功能。
  • 性能。目前我不知道哪个图书馆在表演中胜出,但这绝对是选择时要考虑的事情。 libzmq应该比任何托管代码快得多,但是在CLRZMQ和libzmq之间的通信必须进行编组,所以我真的无法预测哪个库会在速度上获胜。

更新:NetMQ的另一个重要优势是支持 - 您可以在一两天内得到答案,有时甚至可以在几小时内得到答案。

更新2:NetMQ中的轮询器实现问题(描述为here)在我的案例中被证明是NetMQ的show-stopper问题。由于这个问题,我已经将我的项目迁移到了CLRZMQ(我可能会改变我的想法......)然而,谈到poller,你应该注意CLRZMQ文档中的一个问题,并且它被描述为{{3} }

答案 1 :(得分:3)

根据Doron Somech的说法:

http://somdoron.com/2013/03/introducing-netmq/

截至2014年,不再维护C#绑定(CLRZMQ),NetMQ是ZeroMQ和.Net的默认选择。

似乎:

https://github.com/zeromq/clrzmq4

取代了原来的CLRZMQ项目。

我正在使用NetMQ并期待为该项目做出贡献。

P.S。我为NetMQ和原生ZeroMQ构建了相同的Pub-Sub场景,并没有发现任何性能差异。干得好,多伦!