[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