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.
37 - The application using DIOP should have a svc.conf file with the
40 dynamic DIOP_Factory Service_Object * TAO_DIOP:_make_TAO_DIOP_Protocol_Factory() ""
41 static Resource_Factory "-ORBProtocolFactory DIOP_Factory"
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
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.
76 This UDP Pluggable Protocol has been developed for a particular
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.