DDS数据分发服务开放



我是一名学生,目前正在研究如何通过DDS传输文件。我在ubuntu终端上运行了DDS 6.3版本,并成功发布和订阅。问题是我想编辑消息,同样我想在消息中传输文件。有人能帮我吗?

这个答案不是opensplice特定的,它是通用的DDS。

  1. 没有编辑"消息"的概念。没有消息(这在DDS概念/术语空间中)。"发送"信息包"位于主题上,并且是的实例该主题,或该主题的一个实例的示例,如果主题是一个关键主题。

你不是在发送消息,你是在发布一个实例。如果要编辑实例,可以编辑实例并再次发布它。此重新发布的实例可能来自原始发布者实体,也可能来自已接收、编辑并重新发布该实例的订阅者。

  • 如果要传输文件,请使用文件传输程序(ftp、tftp、sftp等)。当然可以考虑使用DDS作为这个进程的控制器(系统A需要一个由系统B维护的文件)。系统A发布一个请求,系统B建立并触发文件的sftp传输,然后发布一个"job complete"实例。

    伪idl:

    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;
    };
    
    然后,System 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"或者"OS_Failed"状态中的一个。

    我知道这是一个有一年历史的问题,但它可能仍然有助于人们了解如何使用DDS完成事情,或者如何在DDS概念空间中看待事情。

  • 相关内容

    • 没有找到相关文章

    最新更新