zeromq - NetMQ 与 clrzmq

标签 zeromq netmq

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

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

NetMQ 和 clrzmq 有什么区别?

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

最佳答案

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

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

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

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

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

更新 2:在我的例子中,NetMQ 中轮询器实现的问题(描述为 here )结果证明是 NetMQ 的显示停止问题。由于这个问题,我已将我的项目迁移到 CLRZMQ(我可能会改变主意......)不过,谈到轮询器,您应该注意 CLRZMQ 文档中的一个问题,它被描述为 here

关于zeromq - NetMQ 与 clrzmq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682886/

相关文章:

python - ZMQ 删除旧消息

zeromq - 0mq/NetMQ PUB/SUB 未传送所有消息

c++ - 官方ZeroMQ多线程示例的修改版本崩溃

multithreading - 我可以在同一个 ZeroMQ REQ/REP 套接字上从一个线程发送()并从另一个线程发送()吗?

python - 以下场景必须使用哪种 ZMQ 模式?

c# - 从多个线程访问NetMQ套接字

zeromq - zmq 中的端口分配是如何在幕后完成的?

java - ZeroMQ:消失的消息

c++ - 0MQ 远程登录数据 C++