프리미티브 유형의 게시자와 구독자를 만들었습니다. 이제 파일 (xml, txt, 비디오, 오디오 등)을 DDS에 게시하려고 할 때 문제가 발생합니다. IDL 파일에서 유형을 지정하는 방법과 전체 파일을 DDS에 게시하는 방법 (가입자 측에서 파일을 수신하는 방법)을 모르겠습니다.파일을 공개 스플 라이스에 게시 DDS
그리고 "DDS에 게시하는 데 메모리 제한이 있습니까?"라는 질문이 하나 더 있습니다.
프리미티브 유형의 게시자와 구독자를 만들었습니다. 이제 파일 (xml, txt, 비디오, 오디오 등)을 DDS에 게시하려고 할 때 문제가 발생합니다. IDL 파일에서 유형을 지정하는 방법과 전체 파일을 DDS에 게시하는 방법 (가입자 측에서 파일을 수신하는 방법)을 모르겠습니다.파일을 공개 스플 라이스에 게시 DDS
그리고 "DDS에 게시하는 데 메모리 제한이 있습니까?"라는 질문이 하나 더 있습니다.
DDS를 사용하여 파일을 분배 할 수있는 경로가 여러 가지 있습니다. 가장 직접적인 (그러나 꼭 필요한 것은 아님) 파일의 내용을 캡처하기 위해 일련의 8 진수 (바이트)를 사용하고 있습니다. 이이 같은 IDL 정의에 의해 달성 될 수있다 : 귀하의 질문에 OpenSplice DDS에 대한 특정 아니지만, 어떤 DDS 구현에 적용 할 수
const long MAX_NAME_LEN = 128;
const long MAX_FILE_SIZE = 100000;
typedef string<MAX_NAME_LEN> NameType;
typedef sequence<octet,MAX_FILE_SIZE> BinaryContentsType;
struct BinaryFile {
NameType name; //@key
BinaryContentsType contents;
};
#pragma keylist BinaryFile name
때문에, 나는 그것이 작동하도록 키 속성을 정의하는 구문을 포함했다 몇 가지 구현.
응용 프로그램에서 형식을 인스턴스화하고 멤버 값을 채워야합니다.
BinaryFile instance = new BinaryFile();
instance.name = "SomeFileName";
// fill instance.contents by reading file into array of bytes.
contents
속성 등이 보일 것이다 뭔가 바이트의 배열 될 것입니다. 내용이 채워지면 BinaryFileDataWriter
에있는 write
메소드를 호출합니다. 다른 예제와 비슷합니다.
이렇게 구성된 공유 메모리의 제한 외의 크기로 구성된 파일의 크기에는 실제 제한이 없습니다. 그러나 크기에 제한을 두는 것이 좋습니다. 따라서 BinaryContentsType
형식의 시퀀스가 제한됩니다.
사용중인 프로그래밍 언어를 언급하지 않았으므로 코딩 세부 정보를 제공하기가 어렵습니다. 그러나 기본 유형으로 시작했다고 언급 했으므로 제공된 문서와 예제를보고 자신의 유형에 적용 할 경우 특히 BinaryFileType
유형을 게시하는 방법을 쉽게 파악할 수 있어야합니다.
측면의 메모로 전체 파일을 배포 하시겠습니까? 상황에 따라 더 나은 접근 방법은 파일 내용의 구조를 분석하고 그 내용과 일치하는 데이터 모델을 만드는 것입니다. 게시자 측에서 파일을 읽고 BLOB가 아닌 의미있는 데이터 항목으로 변환합니다. 이렇게하면 구독자는 사용 가능한 주제의 하위 집합에만 가입하여 콘텐츠의 하위 집합에 가입하거나 콘텐츠를 기반으로하는 필터를 사용하는 등 고급 데이터 관리 기능을 활용할 수 있습니다. 이 모든 것이 의미가 있는지 여부는 사용 사례에 따라 다릅니다.
하지만 진짜 질문은 - 왜? DCPS를 통해 불투명 한 데이터를 전송하는 것이 한 가지이지만 전체 파일입니까? 이것에 더 적합한 몇 가지 프로토콜이 있습니까? IPC와 비슷한 파일 전송을 고려하여 많은 파일을 메모리에 보관합니까? 내 대답은 FTP, NFS, SSHFS, SMB 또는 HTTP를 찾는 것입니다. 이들 모두는 DDS 트래픽과 평화롭게 공존 할 수 있으며 파일 전송을 위해 DDS를 사용하는 경우 에 net benefit이 표시되지 않습니다.
Reinier의 대답은 질문에 따라 정확합니다. (BTW 당신은 정말로 몇 가지 대답을 수락하는 것을 고려해야합니다 - 당신은 두 가지 뛰어난 점이 있습니다! 당신의 다음 질문에 답할 사람이 아무도 없을 수도 있습니다).
DDS가 파일을 전송할 때 얻을 수있는 이점 중 하나는 여러 수신자에게 파일을 전송하려는 경우입니다.멀티 캐스트가 가능한 UDP 위에 구축 된 신뢰할 수있는 프로토콜을 사용하면 여러 파일 전송을 수행하기 위해 대역폭 사용을 초래하지 않으면 서 동시에 여러 수신자에게 파일을 보낼 수 있습니다.
Java 코드에 대한 설명이 약간 추가되었지만 가장 좋은 리소스는 예제와 설명서입니다. 여기에 소스를 게시하는 것이 너무 많습니다. 행운을 빕니다! –