Package org.jgroups.protocols
Class UDP
java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.TP
org.jgroups.protocols.UDP
- All Implemented Interfaces:
Runnable
IP multicast transport based on UDP. Messages to the group (msg.dest == null) will
be multicast (to all group members), whereas point-to-point messages
(msg.dest != null) will be unicast to a single member. Uses a multicast and
a unicast socket.
The following properties are read by the UDP protocol:
- param mcast_addr - the multicast address to use; default is 228.8.8.8.
- param mcast_port - (int) the port that the multicast is sent on; default is 7600
- param ip_mcast - (boolean) flag whether to use IP multicast; default is true.
- param ip_ttl - the default time-to-live for multicast packets sent out on this socket; default is 32.
- param use_packet_handler - boolean, defaults to false. If set, the mcast and ucast receiver threads just put the datagram's payload (a byte buffer) into a queue, from where a separate thread will dequeue and handle them (unmarshal and pass up). This frees the receiver threads from having to do message unmarshalling; this time can now be spent receiving packets. If you have lots of retransmissions because of network input buffer overflow, consider setting this property to true.
- Version:
- $Id: UDP.java,v 1.156.2.16 2009/01/05 08:33:20 belaban Exp $
- Author:
- Bela Ban
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class org.jgroups.protocols.TP
TP.ProbeHandler, TP.ProtocolAdapter
-
Field Summary
Fields inherited from class org.jgroups.protocols.TP
bind_addr, channel_name, discard_incompatible_packets, global_thread_factory, local_addr, members, persistent_ports, persistent_ports_file, pm, pm_expiry_time, thread_naming_pattern, timer, timer_thread_factory, view
-
Constructor Summary
ConstructorsConstructorDescriptionUDP()
Creates the UDP protocol, and initializes the state variables, does however not start any sockets or threads. -
Method Summary
Modifier and TypeMethodDescriptionprotected DatagramSocket
Creates a DatagramSocket when bind_port > 0.protected DatagramSocket
Creates a DatagramSocket with a random port.protected Address
getInfo()
getName()
protected void
handleConfigEvent
(Map<String, Object> map) protected void
protected void
void
postUnmarshalling
(Message msg, Address dest, Address src, boolean multicast) void
postUnmarshallingList
(Message msg, Address dest, boolean multicast) void
run()
void
sendToAllMembers
(byte[] data, int offset, int length) Send to all members in the group.void
sendToSingleMember
(Address dest, byte[] data, int offset, int length) Send to all members in the group.void
setMcastPort
(int p) boolean
setProperties
(Properties props) Setup the Protocol instance acording to the configuration string.protected void
void
start()
Creates the unicast and multicast sockets and starts the unicast and multicast receiver threadsvoid
stop()
This method is called on aChannel.disconnect()
.protected void
Methods inherited from class org.jgroups.protocols.TP
createThreadPool, destroy, down, dumpStats, getBindAddress, getBindPort, getBindToAllInterfaces, getChannelName, getDefaultThreadPool, getDefaultThreadPoolThreadFactory, getIncomingKeepAliveTime, getIncomingMaxPoolSize, getIncomingMaxQueueSize, getIncomingMessages, getIncomingMinPoolSize, getIncomingPoolSize, getIncomingQueueSize, getLocalAddress, getMaxBundleSize, getMaxBundleTimeout, getNumBytesReceived, getNumBytesSent, getNumMessagesReceived, getNumMessagesSent, getOOBKeepAliveTime, getOOBMaxPoolSize, getOOBMaxQueueSize, getOOBMessages, getOOBMinPoolSize, getOOBPoolSize, getOOBQueueSize, getOOBThreadPool, getOOBThreadPoolThreadFactory, getReceiveInterfaces, getSendInterfaces, getSingletonName, getThreadFactory, getThreadNamingPattern, getTimer, getTimerThreadFactory, getUpProtocols, handleDownEvent, init, isDefaulThreadPoolEnabled, isDiscardIncompatiblePackets, isEnable_unicast_bundling, isEnableBundling, isLoopback, isOOBThreadPoolEnabled, isReceiveOnAllInterfaces, isSendOnAllInterfaces, isUseIncomingPacketHandler, passToAllUpProtocols, receive, registerProbeHandler, resetStats, sendUpLocalAddressEvent, setBindAddress, setBindPort, setBindToAllInterfaces, setDefaultThreadPool, setDefaultThreadPoolThreadFactory, setDiscardIncompatiblePackets, setEnable_unicast_bundling, setEnableBundling, setIncomingKeepAliveTime, setIncomingMaxPoolSize, setIncomingMinPoolSize, setLoopback, setMaxBundleSize, setMaxBundleTimeout, setOOBKeepAliveTime, setOOBMaxPoolSize, setOOBMinPoolSize, setOOBThreadPool, setOOBThreadPoolThreadFactory, setThreadFactory, setTimerThreadFactory, toString, unregisterProbeHandler, up
Methods inherited from class org.jgroups.stack.Protocol
downThreadEnabled, enableStats, getDownProtocol, getProperties, getProtocolStack, getTransport, getUpProtocol, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, setDownProtocol, setPropertiesInternal, setProtocolStack, setUpProtocol, statsEnabled, upThreadEnabled
-
Constructor Details
-
UDP
public UDP()Creates the UDP protocol, and initializes the state variables, does however not start any sockets or threads.
-
-
Method Details
-
setProperties
Setup the Protocol instance acording to the configuration string. The following properties are read by the UDP protocol:- param mcast_addr - the multicast address to use default is 228.8.8.8
- param mcast_port - (int) the port that the multicast is sent on default is 7600
- param ip_mcast - (boolean) flag whether to use IP multicast - default is true
- param ip_ttl - Set the default time-to-live for multicast packets sent out on this socket. default is 32
- Overrides:
setProperties
in classTP
- Returns:
- true if no other properties are left. false if the properties still have data in them, ie , properties are left over and not handled by the protocol stack
-
setMcastPort
public void setMcastPort(int p) -
run
public void run() -
getInfo
-
sendToAllMembers
Description copied from class:TP
Send to all members in the group. UDP would use an IP multicast message, whereas TCP would send N messages, one for each member- Specified by:
sendToAllMembers
in classTP
- Parameters:
data
- The data to be sent. This is not a copy, so don't modify itoffset
-length
-- Throws:
Exception
-
sendToSingleMember
Description copied from class:TP
Send to all members in the group. UDP would use an IP multicast message, whereas TCP would send N messages, one for each member- Specified by:
sendToSingleMember
in classTP
- Parameters:
dest
- Must be a non-null unicast addressdata
- The data to be sent. This is not a copy, so don't modify itoffset
-length
-- Throws:
Exception
-
postUnmarshalling
- Specified by:
postUnmarshalling
in classTP
-
postUnmarshallingList
- Specified by:
postUnmarshallingList
in classTP
-
getName
-
start
Creates the unicast and multicast sockets and starts the unicast and multicast receiver threads- Overrides:
start
in classTP
- Throws:
Exception
- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, soChannel.connect(String)
will throw an exception
-
stop
public void stop()Description copied from class:Protocol
This method is called on aChannel.disconnect()
. Stops work (e.g. by closing multicast socket). Will be called from top to bottom. This means that at the time of the method invocation the neighbor protocol below is still working. This method will replace the STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that when this method is called all messages in the down queue will have been flushed -
handleConnect
- Overrides:
handleConnect
in classTP
- Throws:
Exception
-
handleDisconnect
protected void handleDisconnect()- Overrides:
handleDisconnect
in classTP
-
createLocalAddress
-
createEphemeralDatagramSocket
Creates a DatagramSocket with a random port. Because in certain operating systems, ports are reused, we keep a list of the n last used ports, and avoid port reuse- Throws:
SocketException
-
createDatagramSocketWithBindPort
Creates a DatagramSocket when bind_port > 0. Attempts to allocate the socket with port == bind_port, and increments until it finds a valid port, or until port_range has been exceeded- Returns:
- DatagramSocket The newly created socket
- Throws:
Exception
-
setThreadNames
protected void setThreadNames()- Overrides:
setThreadNames
in classTP
-
unsetThreadNames
protected void unsetThreadNames()- Overrides:
unsetThreadNames
in classTP
-
handleConfigEvent
- Overrides:
handleConfigEvent
in classTP
-