[omniORB] Using CORBA for data transfer?
Matej Kenda
matej.kenda@hermes.si
Tue, 12 Jun 2001 15:02:00 +0200
Thank you very much, Bruce.
I made a simple IDL to try this:
typedef sequence<octet> DataBuffer_t;
interface IVD {
void write(in DataBuffer_t a_buf);
DataBuffer_t read();
};
I ran some simple tests and the performance using simple client/servant data
transfer is quite OK. However, they consume 100% CPU when running on the
same computer (Linux 2.4.4, PIII 800).
I have browsed omniORB-list resources and found out that network interface
is used (lo) even when running on the same computer.
What about marshalling in this particular example?
I guess that it shouldn't be performed when using octets. Is it performed
anyway?
I agree with Stefan Seefeld (seefeld@sympatico.ca) that co-located
client/servant should be heavily optimised. (discussion: Server & client on
the same machine: no network used ?)
Matej
-----Original Message-----
From: Bruce Fountain [mailto:B_Fountain@motherwell.com.au]
Sent: Tuesday, June 12, 2001 11:03 AM
To: Matej Kenda; omniORB-list (E-mail)
Subject: RE: [omniORB] Using CORBA for data transfer?
Matej Kenda [mailto:matej.kenda@hermes.si] wrote:
> One of the crucial parts of our application is data transfer
> between two of
> our objects. Data consists of files, enriched with some
> additional meta-data
> and is generated by the object A and written to disk as-is by object B
> (ftp-like). Data is packaged in data blocks, which size is defined at
> run-time.
You would normally use a sequence, since you have variable-length blocks:
// IDL
typedef sequence<char> dataBlock;
You don't need a size parameter anymore because the sequence knows its
own length (this is pretty much equivalent to std::vector<char>).
If your data is actually binary you would probably use sequence<octet>
instead of sequence<char>. This should be sufficiently efficient for most
purposes, but applications like streaming video often push the limits of
the ORB implementation.
Bruce Fountain
b_fountain@motherwell.com.au