Merge pull request #2301 from sonndinh/remove-dup-reactor-functions
[ACE_TAO.git] / TAO / examples / PluggableUDP / DIOP / README
blob2e406a502993c7e7c5a6b78f0f00dd15c71b5a97
3 DIOP - UDP Based Pluggable Protocol
4 ===================================
6 NOTE: The file that were in this directory have been moved to
7       $TAO_ROOT/tao/Strategies/.
9 This directory contains all of the code needed to use the UDP
10 Pluggable Protocol (DIOP).  It is work-in-progress that when complete
11 will be integrated with the other standard pluggable protocols in
12 $TAO_ROOT/tao/Strategies/.
14 Notes on the DIOP implementation:
16 - The DIOP implemenation uses connectionless UDP sockets.
18 - The server DIOP implementation bypasses the actual TAO Acceptor
19   and opens always a UDP socket on start-up.
21 - The address of that UDP socket can be configured via -ORBEndpoint,
22   e.g., -ORBEndpoint diop://:1303
24   If nothing is specified, the implementation will select a port and
25   open a socket on all network interfaces.  This is the default ORB
26   behavior and can be overwritten using the -ORBEndpoint switch.
28 - Because no connections - no state - exist, all client requests
29   from different clients arrive at the same socket!
31 - The client DIOP implementation bypasses the actual
32   TAO Connector.  It installs a connection handler on the first
33   invocation on a remote CORBA object.
35 DIOP Installation
37 - The application using DIOP should have a svc.conf file with the
38   following entry:
40   dynamic DIOP_Factory Service_Object * TAO_DIOP:_make_TAO_DIOP_Protocol_Factory() ""
41   static Resource_Factory "-ORBProtocolFactory DIOP_Factory"
43 Limitations:
45 - No preconnections are supported.
47 - No thread-per-connection is supported.
49 - Requests from multiple clients are received on the same socket.
51 - Only oneway invocations operations are supported.
53   Using exclusive connections (see ORB configuration) twoways might
54   work, but are not supported yet.  Please note that you need to use
55   timeouts in combination with twoways in order to avoid deadlocking
56   your application.
58 Open Issues:
60 - Default port is the same on client and server, therefore
61   the client ports need to be explicitly set by -ORBEndpoint option.
62   Maybe there is a way to find free ports?
64 - GIOP invocations containing more than ACE_MAX_DGRAM_SIZE bytes of header
65   and invocation data will not be sent to the remote side, they will
66   be dropped without error notification.  The reason for this is that
67   we want to ensure all invocation information is received at once by
68   the server. Supporting multiple UDP packets would require keeping
69   state in the server and is therefore avoided.
71   A hook might be provided in the future in order to notify
72   applications about dropped invocations.
74 Disclaimer:
76   This UDP Pluggable Protocol has been developed for a particular
77   set of assumptions:
79   - Almost 100% reliable UDP communication, e.g., IP over ATM.
80     Even if it would be less reliable you can manage it by using
81     one-way request operations and one-way response operations in
82     combination with application level timeouts.
84   - TCP is inappropriate due to its sluggish on sudden disconnections,
85     e.g., it must be possible to "plug & play" CPU cards without
86     impacting any ORB communicating to a CPU.  This is the main reason
87     why we do not keep any state in the client of the Pluggable Protocol.
89   - Every GIOP message (and therefore every IDL signature) message is
90     <= 4kB, i.e., ACE_MAX_DGRAM_SIZE.  Support for fragmentation, as
91     GIOP 1.2 supports it might help, this is a future option.
92     Thus, no data sent via DIOP can be larger than ACE_MAX_DGRAM_SIZE.