[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[xmlblaster-devel] Java and C UDP code commited for SOCKET protocol (donated from Michal Masa)
Hi Michal,
i have commited now your C & Java code after some
smaller modifications.
Please update xmlBlaster from cvs before making
any code further changes!
I try to summerize the current state, please correct
me if something is wrong.
UDP Datagram settings for SOCKET protocol
=========================================
1. UDP is configurable for publishOneway() and updateOneway().
2. UDP is switched off in C and Java as default because
of its limited message length.
3. Server side SOCKET protocol plugin updateOneway() configuration:
You can switch on using UDP instead of TCP with 'useUdpForOneway'
(see example in xmlBlaster/config/xmlBlasterPlugins.xml.template)
In your case you should add to xmlBlasterPlugins.xml
<attribute id='useUdpForOneway'>true</attribute>
or add on command line
java org.xmlBlaster.Main -plugin/socket/useUdpForOneway true
4. I have removed <clientProperty name='__udp'...> completely
because of performance impact and design issues
5. The C client switches on UDP for publishOneway like this,
see the new xmlBlaster/demo/c/socket/HelloWorldUdp.c
HelloWorldUdp -dispatch/connection/plugin/socket/useUdpForOneway true
How to choose updateOneway() for message callback
=================================================
The publisher can choose publishOneway() with or without UDP,
but he has no influence over the delivery to subscribers.
The subscriber needs to add a
<updateOneway/>
to its subscribe QoS to receive the callbacks for this
subscriptions with updateOneway() instead of the default update().
This is a new feature, probably we should remove the 'oneway' flag
in ConnectQos.
In the C client code HelloWorldUdp.c is an example for this, you
can play with it on command line:
./HelloWorldUdp -dispatch/connection/plugin/socket/useUdpForOneway true -updateOneway true
Todo:
=====
o We could fallback from UDP to TCP automatically when a message size
exceeds the max UDP datagram length.
Each network in the Internet is characterised by a Maximum Transmission Unit (MTU),
which defines the largest datagram which can be sent on that network.
Whilst the total length of a datagram can (in theory) be up to 64 KB,
"real world" MTU limits usually mean datagrams are smaller 1500 bytes in total length.
We have defined in xmlBlasterSocket.h
#define MAX_PACKET_SIZE 10*1024
and in SocketDriver.java
static final int MAX_PACKET_SIZE = 1024*10
Should we send some test datagrams to find out the max size?
o Implement UDP communication with the Java client library
o Update documentation
o Write testcases
Thanks for this nice contribution,
regards
Marcel
--
http://www.xmlBlaster.org