私は学生で、現在 DDS 経由でファイルを転送する方法に取り組んでいます。ubuntu端末でddsバージョン6.3を実行し、正常に公開および購読しました。問題は、メッセージを編集したいことと、同様にメッセージ内のファイルを転送したいことです。私を助けることができる人はいますか?それは大歓迎です
1 に答える
1
この回答はopensplice固有のものではなく、一般的なDDSです。
- 「メッセージ」を編集するという概念はありません。メッセージはありません (これは DDS の概念/用語スペースにあります)。「送信された情報のパケット」はトピック上にあり、そのトピックのインスタンス、またはトピックがキートピックの場合はそのトピックのインスタンスのサンプルのいずれかです。
メッセージを送信しているのではなく、インスタンスを公開しています。インスタンスを編集する場合は、編集してから再度公開します。この再発行されたインスタンスは、元の発行者エンティティからのものである場合もあれば、それを受け取り、編集してから再発行した購読者からのものである場合もあります。
- ファイルを転送する場合は、ファイル転送プログラム (ftp、tftp、sftp など) を使用します。このプロセスのコントローラーとして DDS を使用することを検討してください (システム A は、システム B によって維持されるファイルを必要とします。システム A は要求を発行し、システム B はファイルの sftp 転送をセットアップして開始し、「ジョブ完了」インスタンスを発行します。
擬似アイドル:
enum ObjectiveState {
OS_Desire, // "I need this"
OS_Can, // "I am able to supply this"
OS_Can_Not, // "I am not able to supply this"
OS_In_Process, // "I am doing this"
OS_Complete, // "I did this"
OS_Failed, // "Tried, but unable to complete, try again maybe?"
OS_PermanentFail // "Tried, but can't complete."
};
struct FileTxReq {
long long reqid; //@key
DestinationNode dest; // idl not supplied, some GUID thing
string<256> sourceUri;
string<256> destUri;
ObjectiveState state;
};
次に、システム A は FileRequestTopic でサンプルを発行します。
reqid: 0x1234
dest: {systemA}
sourceUri: "/store/publicfiles/theImageFile.jpg"
destUri: "/Users/me/drop/theImageFile.jpg"
state: OS_Desire
システム B はファイル ストアを持っているため、FileRequestTopic をサブスクライブします。探して、要求された uri を見つけて公開します
reqid: 0x1234 (note this is the same reqid as received)
dest: {systemA} (note this is also copied from the received instance)
sourceUri: "/store/publicfiles/theImageFile.jpg" (also the same)
destUri: "/Users/me/drop/theImageFile.jpg" (also the same)
state: OS_Can
システム B は sftp 転送を開始し、上記のように発行しますが、現在の状態は「OS_In_Process」です。sftp が完了すると、"OS_Complete" (または 2 つの "OS_Failed" 状態のいずれか) のサンプルが発行されます。
これは 1 年前の質問であることは認識していますが、DDS を使用してどのように物事を行うことができるか、または DDS の概念空間で物事がどのように見られるかについて、人々が頭を悩ませていることにまだ役立つかもしれません。
于 2015-05-13T14:27:31.313 に答える