Most informative, thanks Hiram. Is it correct that the C# client only supports 
tight marshalling at the moment?

Regards,
Mats

-----Original Message-----
From: Hiram Chirino [mailto:[EMAIL PROTECTED] 
Sent: den 1 mars 2006 19:26
To: [email protected]
Subject: Recent OpenWire changes

Hi Everybody,

Just a quick heads up,  openwire by default tries to encode commands  
as tight as possible on the wire to decrease bandwidth requirements.   
To do this, it currently uses a 2 pass algorithm where the first pass collects 
all boolean writes into a bit array and pre calculates the size of the command 
on the wire.  The second pass writes the command to the stream.

While this produces small on the wire size, it's  a bit CPU intensive, so I 
made a change so that a loose encoding is also possible which marshals the 
messages in a single pass and avoids doing all the fancy things that the tight 
encoding was using.  Using loose encoding should make sense if your broker is 
CPU bound and network bandwidth is not an issue.  So if you look at the open 
wire classes you will now see a bunch of tightMarshal/Unmarshal and 
looseMarshal/Unmarshal methods.

Another option that has been added is the ability to omit the command size 
prefix on the serialized commands.  The command size prefix is actually only 
useful for non blocking implementations where we only want to unmarshal the 
command once it has been fully received.  In normal blocking IO, knowing the 
size of the command in not necessary.  By omitting the command size, we should 
be able to do more efficient marshaling of the command since we don't have to 
calculate the command size beforehand.

These default options are still at what they were before (tight encoding and 
command size prefixing), but they can be negotiated between the client and 
server with the WireFormatInfo packet.

Regards,
Hiram

Reply via email to