Package org.jgroups.protocols
Class UDP
- java.lang.Object
-
- org.jgroups.stack.Protocol
-
- org.jgroups.protocols.TP
-
- org.jgroups.protocols.UDP
-
- All Implemented Interfaces:
java.lang.Runnable
public class UDP extends TP implements java.lang.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 Classes Modifier and Type Class Description class
UDP.UcastReceiver
-
Nested 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
Constructors Constructor Description UDP()
Creates the UDP protocol, and initializes the state variables, does however not start any sockets or threads.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.net.DatagramSocket
createDatagramSocketWithBindPort()
Creates a DatagramSocket when bind_port > 0.protected java.net.DatagramSocket
createEphemeralDatagramSocket()
Creates a DatagramSocket with a random port.protected Address
createLocalAddress()
java.lang.String
getInfo()
java.lang.String
getName()
protected void
handleConfigEvent(java.util.Map<java.lang.String,java.lang.Object> map)
protected void
handleConnect()
protected void
handleDisconnect()
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(java.util.Properties props)
Setup the Protocol instance acording to the configuration string.protected void
setThreadNames()
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
unsetThreadNames()
-
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
-
-
-
-
Method Detail
-
setProperties
public boolean setProperties(java.util.Properties props)
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()
- Specified by:
run
in interfacejava.lang.Runnable
-
sendToAllMembers
public void sendToAllMembers(byte[] data, int offset, int length) throws java.lang.Exception
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 it- Throws:
java.lang.Exception
-
sendToSingleMember
public void sendToSingleMember(Address dest, byte[] data, int offset, int length) throws java.lang.Exception
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 it- Throws:
java.lang.Exception
-
postUnmarshalling
public void postUnmarshalling(Message msg, Address dest, Address src, boolean multicast)
- Specified by:
postUnmarshalling
in classTP
-
postUnmarshallingList
public void postUnmarshallingList(Message msg, Address dest, boolean multicast)
- Specified by:
postUnmarshallingList
in classTP
-
start
public void start() throws java.lang.Exception
Creates the unicast and multicast sockets and starts the unicast and multicast receiver threads- Overrides:
start
in classTP
- Throws:
java.lang.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
protected void handleConnect() throws java.lang.Exception
- Overrides:
handleConnect
in classTP
- Throws:
java.lang.Exception
-
handleDisconnect
protected void handleDisconnect()
- Overrides:
handleDisconnect
in classTP
-
createLocalAddress
protected Address createLocalAddress()
-
createEphemeralDatagramSocket
protected java.net.DatagramSocket createEphemeralDatagramSocket() throws java.net.SocketException
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:
java.net.SocketException
-
createDatagramSocketWithBindPort
protected java.net.DatagramSocket createDatagramSocketWithBindPort() throws java.lang.Exception
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:
java.lang.Exception
-
setThreadNames
protected void setThreadNames()
- Overrides:
setThreadNames
in classTP
-
unsetThreadNames
protected void unsetThreadNames()
- Overrides:
unsetThreadNames
in classTP
-
handleConfigEvent
protected void handleConfigEvent(java.util.Map<java.lang.String,java.lang.Object> map)
- Overrides:
handleConfigEvent
in classTP
-
-