0

現在、ソケットを使用してデバイス間でデータを渡す方法が必要なため、サーバー側で Python スクリプトを使用して ZeroMQ を使用し、すべてが機能しているようです。現在、私たちのプロトコル アドレスは ですがepgm://224.0.0.1:28650、Python スクリプトと通信する必要があるため、このSwift ライブラリを使用することにしました。現在、このリポジトリのライブラリを直接使用しており、パッチ レベル .2 の ZeroMQ ライブラリ バージョン 4.2 を使用しているようです。次に、この関数を使用して、ライブラリに .pgm プロトコルがあるかどうかを確認します。このプロトコルは、アプリがサポートしていないと報告しています。

ライブラリには特定のプロトコルをサポートしているかどうかを確認するこの機能がありますが、ライブラリで pgm プロトコルをサポートする方法については、Google で何も見つかりません。

元の迅速なライブラリを調べた後、 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

そのため、EPGM と PGM のサポートが不足しているため、ZeroMQ のディッシュ/ラジオ ドラフト API で生の UDP を使用することにしました。これらのドラフト API は EPGM と PGM を置き換えることになっていますが、まだ開発中です。API は私たちのユース ケースで機能しますが、ユース ケースによって異なる場合があります。

編集:

したがって、この質問に対するより良い答えがあります。SwiftyZeroMQ (少なくとも私のバージョン) が EPGM および PGM プロトコルをサポートしていない理由は、openpgmオプションを使用して ZMQ を自分でコンパイルする必要があるためです。

于 2020-11-25T00:22:54.230 に答える