为什么 SwiftyZeroMQ 不支持 epgm:// 和 pgm:// transport-类?

Why doesn't SwiftyZeroMQ support epgm:// and pgm:// transport-classes?

我们目前想要一种在带套接字的设备之间传递数据的方法,因此我们在服务器端使用 ZeroMQ 和 python 脚本,一切似乎都正常。我们的协议地址目前是 epgm://224.0.0.1:28650,但是,我们需要与 python 脚本通信,所以我们决定使用这个 Swift library. Currently, I'm directly using the library from this repository and it seems to be using ZeroMQ library version 4.2 with patch level .2. Then, using this function,我正在检查库是否有 .pgm我的应用程序报告它不支持的协议。

虽然库有这个功能来检查它是否支持某种协议,但我无法在 google 上找到任何关于如何让库支持 pgm 协议的信息。

查看原始 swift 库后,我找到了 zmq.h which, from what I can tell is what the swift library is using as it's ZMQ library. So, after discovering this, I attempted to recompile libzmq 以及我们用来修复 PyZMQ 问题的“--with-pgm”构建选项。但是,我真的没有太多运气,我什至不确定我应该如何进行。我目前不知所措,将不胜感激。谢谢。

这是我们当前使用的 Swift 代码:

import SwiftyZeroMQ5

class communicationClass{
   var context: SwiftyZeroMQ.Context?;
   var subscriber: SwiftyZeroMQ5.SwiftyZeroMQ.Socket?;

   init(){
      do{
         context = try SwiftyZeroMQ.Context();
         subscriber = try context?.socket(.subscribe);
         try subscriber?.connect("epgm://224.0.0.1:28650");
      }
      catch{
         print("error - \(error)")
      }
   }
}

这是它输出的错误:error - Protocol not supported

Q : "Why doesn't SwiftyZeroMQ support epgm:// and pgm:// transport-classes?"

关于此的文档清晰可靠:

as-is 包确实明确说明,它确实 not 支持 epgm://-运输 class 截至 2020-10。


下一步:

尝试使用 pgm://-transport-class,而不是 epgm://,如果失败,请在包维护者的 incident-management 队列中提交问题,因为他们声称它应该有效。

因此,由于缺乏对 EPGM 和 PGM 的支持,我们决定将原始 UDP 与 ZeroMQ 的 dish/radio 草稿 API 一起使用。这些草稿 api 应该取代 EPGM 和 PGM,但它们仍在开发中。这些 API 适用于我们的用例,但它可能会因您的用例而异。

编辑:

所以,这个问题有更好的答案。 SwiftyZeroMQ(至少我的版本)不支持 EPGM 和 PGM 协议的原因是您需要使用 openpgm 选项自行编译 ZMQ。