Служба распространения данных DDS opensplice

Я студент, и в настоящее время я работаю над способами передачи файла через DDS. Я запустил dds версии 6.3 на терминале Ubuntu и успешно опубликовал и подписался. проблема заключается в том, что я хочу отредактировать сообщение, а также хочу передать файл в сообщении. есть кто-нибудь, кто может мне помочь? это будет высоко ценится

1 ответ

Этот ответ не является специфичным для opensplice, это общий DDS.

  1. Нет концепции редактирования "сообщения". Нет сообщений (это в концепции / терминологии DDS). "Отправленный пакет информации" находится в теме и представляет собой либо экземпляр этой темы, либо образец экземпляра этой темы, если тема является ключевой темой.

Вы не отправляете сообщение, вы публикуете экземпляр. Если вы хотите редактировать экземпляр, вы делаете это и публикуете его снова. Этот повторно опубликованный экземпляр может исходить от исходного объекта-издателя или от подписчика, который получил его, отредактировал и затем повторно опубликовал.

  1. Если вы хотите передать файл, используйте программу для передачи файлов (ftp, tftp, sftp и т. Д.). Конечно, рассмотрите возможность использования DDS в качестве контроллера для этого процесса (системе A требуется файл, поддерживаемый системой B. Система A публикует запрос, система B устанавливает и запускает передачу файла по протоколу sftp, а затем публикует экземпляр "работа завершена".

псевдо 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;
};

Затем система 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.

Другие вопросы по тегам