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 classUDP.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.DatagramSocketcreateDatagramSocketWithBindPort()Creates a DatagramSocket when bind_port > 0.protected java.net.DatagramSocketcreateEphemeralDatagramSocket()Creates a DatagramSocket with a random port.protected AddresscreateLocalAddress()java.lang.StringgetInfo()java.lang.StringgetName()protected voidhandleConfigEvent(java.util.Map<java.lang.String,java.lang.Object> map)protected voidhandleConnect()protected voidhandleDisconnect()voidpostUnmarshalling(Message msg, Address dest, Address src, boolean multicast)voidpostUnmarshallingList(Message msg, Address dest, boolean multicast)voidrun()voidsendToAllMembers(byte[] data, int offset, int length)Send to all members in the group.voidsendToSingleMember(Address dest, byte[] data, int offset, int length)Send to all members in the group.voidsetMcastPort(int p)booleansetProperties(java.util.Properties props)Setup the Protocol instance acording to the configuration string.protected voidsetThreadNames()voidstart()Creates the unicast and multicast sockets and starts the unicast and multicast receiver threadsvoidstop()This method is called on aChannel.disconnect().protected voidunsetThreadNames()-
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:
setPropertiesin 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:
runin interfacejava.lang.Runnable
-
sendToAllMembers
public void sendToAllMembers(byte[] data, int offset, int length) throws java.lang.ExceptionDescription copied from class:TPSend 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:
sendToAllMembersin 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:TPSend 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:
sendToSingleMemberin 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:
postUnmarshallingin classTP
-
postUnmarshallingList
public void postUnmarshallingList(Message msg, Address dest, boolean multicast)
- Specified by:
postUnmarshallingListin classTP
-
start
public void start() throws java.lang.ExceptionCreates the unicast and multicast sockets and starts the unicast and multicast receiver threads- Overrides:
startin 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:ProtocolThis 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:
handleConnectin classTP- Throws:
java.lang.Exception
-
handleDisconnect
protected void handleDisconnect()
- Overrides:
handleDisconnectin classTP
-
createLocalAddress
protected Address createLocalAddress()
-
createEphemeralDatagramSocket
protected java.net.DatagramSocket createEphemeralDatagramSocket() throws java.net.SocketExceptionCreates 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.ExceptionCreates 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:
setThreadNamesin classTP
-
unsetThreadNames
protected void unsetThreadNames()
- Overrides:
unsetThreadNamesin classTP
-
handleConfigEvent
protected void handleConfigEvent(java.util.Map<java.lang.String,java.lang.Object> map)
- Overrides:
handleConfigEventin classTP
-
-