【问题标题】:Why doesn't SwiftyZeroMQ support epgm:// and pgm:// transport-classes?为什么 SwiftyZeroMQ 不支持 epgm:// 和 pgm:// 传输类?
【发布时间】:2021-03-03 11:54:21
【问题描述】:

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

虽然库有这个功能来检查它是否支持某种协议,但我无法在谷歌上找到任何关于如何让库支持 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

【问题讨论】:

    标签: swift sockets zeromq multicast pgm-protocol


    【解决方案1】:

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

    文档清楚且合理:

    原样包确实明确声明,它确实not支持@ 987654324@-截至 2020-10 的运输类。


    下一步:

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

    【讨论】:

    • 是的,epgm 和 pgm 我都试过了,但它们都不起作用。我的侦探工作目前让我相信这个问题是由于 SwiftyZeroMQ 不支持 pgm 的 ZeroMQ 库或者像你提到的那样,这是包维护者方面的问题。
    【解决方案2】:

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

    编辑:

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

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      相关资源
      最近更新 更多