0

我们目前想要一种在带有套接字的设备之间传递数据的方法,所以我们在服务器端使用了带有 python 脚本的 ZeroMQ,一切似乎都在工作。目前我们的协议地址是epgm://224.0.0.1:28650,但是我们需要和python脚本通信所以我们决定使用这个Swift库。目前,我直接使用这个存储库中的库,它似乎正在使用 ZeroMQ 库版本 4.2,补丁级别为 0.2。然后,使用这个函数,我正在检查该库是否具有 .pgm 协议,我的应用程序报告它不支持它。

尽管该库具有此功能来检查它是否支持某个协议,但我无法在 google 上找到有关如何让库支持 pgm 协议的任何信息。

在查看了原始的 swift 库之后,我能够找到zmq.h ,据我所知,它是 swift 库使用的 ZMQ 库。因此,在发现这一点后,我尝试使用我们用来解决 PyZMQ 问题的“--with-pgm”构建选项重新编译 libzmq 但是,我对此并没有太多的运气,我什至不确定这是我应该如何进行的。我目前不知所措,任何帮助将不胜感激。谢谢。

这是我们当前使用的 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

4

2 回答 2

0

“为什么 SwiftyZeroMQ 不支持传输epgm://pgm://?”

文档清楚且合理:

原样包确实明确指出,截至 2020-10,它不支持-transportepgm://类。


下一步:

尝试使用pgm://-transport-class,而不是,epgm://如果失败,请在包维护者的事件管理队列中提交问题,因为他们声称它应该可以工作。

于 2020-10-22T20:43:42.433 回答
0

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

编辑:

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

于 2020-11-25T00:22:54.230 回答