我是一名学生,目前正在研究如何通过DDS传输文件。我在ubuntu终端上运行了DDS 6.3版本,并成功发布和订阅。问题是我想编辑消息,同样我想在消息中传输文件。有人能帮我吗?
这个答案不是opensplice特定的,它是通用的DDS。
- 没有编辑"消息"的概念。没有消息(这在DDS概念/术语空间中)。"发送"信息包"位于主题上,并且是的实例该主题,或该主题的一个实例的示例,如果主题是一个关键主题。
你不是在发送消息,你是在发布一个实例。如果要编辑实例,可以编辑实例并再次发布它。此重新发布的实例可能来自原始发布者实体,也可能来自已接收、编辑并重新发布该实例的订阅者。
- 如果要传输文件,请使用文件传输程序(ftp、tftp、sftp等)。当然可以考虑使用DDS作为这个进程的控制器(系统A需要一个由系统B维护的文件)。系统A发布一个请求,系统B建立并触发文件的sftp传输,然后发布一个"job complete"实例。
伪idl:
然后,System A将在FileRequestTopic上发布一个示例: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; };
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"或者"OS_Failed"状态中的一个。
我知道这是一个有一年历史的问题,但它可能仍然有助于人们了解如何使用DDS完成事情,或者如何在DDS概念空间中看待事情。