6

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

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

NetMQ 和 clrzmq 有什么区别?

(虽然我会自己回答这个问题,但如果其他人在这个问题上有一些经验 - 欢迎替代答案!)

4

2 回答 2

9

两者之间的主要区别在于方法:

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

使用哪一个?好吧,没有简单的答案。以下是选择时要记住的一些重要事项:

  • 在可移植性方面 - NetMQ 是迄今为止最成功的,特别是因为有 NetMQ 的 .NET Core 版本。使用 NetMQ 进行部署也更容易 - 无需担心本地库(x64 / x86 等)。
  • 另一方面,NetMQ 实际上重写了一切,这对我来说有点吓人——总是有某些东西没有从原始代码精确镜像的风险,并且可能导致与其他 ZeroMQ 节点不兼容。还有一个问题是 NetMQ 会以多快的速度实现原始库中的新功能。
  • 表演。目前我不知道哪个库在性能上获胜,但这绝对是在选择时要考虑的事情。libzmq应该比任何托管代码都快得多,但是 CLRZMQ 和libzmq封送处理之间的通信必须发生,所以我真的无法预测哪个库会在速度上获胜。

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

更新 2:在我的情况下,NetMQ 中的轮询器实现问题(在此处描述)原​​来是 NetMQ 的显示停止器问题。由于这个问题,我已经将我的项目迁移到 CLRZMQ(我可能会改变主意......)不过,谈到轮询器,您应该注意 CLRZMQ 文档中的一个问题,它在此处进行了描述

于 2016-07-31T10:09:02.477 回答
4

根据 Doron Somech 的说法:

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

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

看起来:

https://github.com/zeromq/clrzmq4

替换了原来的 CLRZMQ 项目。

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

PS 我为 NetMQ 和本机 ZeroMQ 构建了相同的 Pub-Sub 场景,但没有发现任何性能差异。干得好,多伦!

于 2016-08-12T22:41:23.777 回答