org.jgroups.protocols

Class UDP_NIO

Implemented Interfaces:
MembershipListener, MessageListener, Receiver

public class UDP_NIO
extends Protocol
implements Receiver

Multicast transport. Similar to UDP, but binds to multiple (or all) interfaces for sending and receiving multicast and unicast traffic.
The list of interfaces can be set via a property (comma-delimited list of IP addresses or "all" for all interfaces). Note that this class only works under JDK 1.4 and higher.
For each of the interfaces listed we create a Listener, which listens on the group multicast address and creates a unicast datagram socket. The address of this member is determined at startup time, and is the host name plus a timestamp (LogicalAddress). It does not change during the lifetime of the process. The LogicalAddress contains a list of all unicast socket addresses to which we can send back unicast messages. When we send a message, the Listener adds the sender's return address. When we receive a message, we add that address to our routing cache, which contains logical addresses and physical addresses. When we need to send a unicast address, we first check whether the logical address has a physical address associated with it in the cache. If so, we send a message to that address. If not, we send the unicast message to all physical addresses contained in the LogicalAddress.
UDP_NIO guarantees that - in scenarios with multiple subnets and multi-homed machines - members do see each other. There is some overhead in multicasting the same message on multiple interfaces, and potentially sending a unicast on multiple interfaces as well, but the advantage is that we don't need stuff like bind_addr any longer. Plus, the unicast routing caches should ensure that unicasts are only sent via 1 interface in almost all cases.
Version:
$Id: UDP_NIO.java,v 1.4 2005/08/11 12:43:47 belaban Exp $
Author:
Bela Ban Oct 2003

Nested Class Summary

static class
UDP_NIO.Connector
Manages a multicast and unicast socket on a given interface (NIC).
static class
UDP_NIO.ConnectorTable
Manages a bunch of Connectors
static class
UDP_NIO.MulticastReceiver
static class
UDP_NIO.MyReceiver
static class
UDP_NIO.Unmarshaller

Field Summary

Fields inherited from class org.jgroups.stack.Protocol

down_handler, down_prot, down_queue, down_thread, down_thread_prio, log, observer, props, stack, stats, trace, up_handler, up_prot, up_queue, up_thread, up_thread_prio, warn

Constructor Summary

UDP_NIO()
Creates the UDP_NIO protocol, and initializes the state variables, does however not start any sockets or threads.

Method Summary

List
determineAllBindInterfaces()
String
determineDefaultBindInterface()
Return the first non-loopback interface
void
down(Event evt)
Caller by the layer above this layer.
String
getName()
void
init()
static void
main(String[] args)
void
receive(DatagramPacket packet)
boolean
setProperties(Properties props)
Setup the Protocol instance acording to the configuration string.
void
start()
Creates the unicast and multicast sockets and starts the unicast and multicast receiver threads
void
startUpHandler()
This prevents the up-handler thread to be created, which essentially is superfluous: messages are received from the network rather than from a layer below.
void
stop()
String
toString()
debug only
void
up(Event evt)
handle the UP event.

Methods inherited from class org.jgroups.stack.Protocol

destroy, down, downThreadEnabled, dumpStats, enableStats, getDownProtocol, getDownQueue, getName, getProperties, getUpProtocol, getUpQueue, handleSpecialDownEvent, init, isTrace, isWarn, passDown, passUp, printStats, providedDownServices, providedUpServices, receiveDownEvent, receiveUpEvent, requiredDownServices, requiredUpServices, resetStats, setDownProtocol, setObserver, setProperties, setPropertiesInternal, setProtocolStack, setTrace, setUpProtocol, setWarn, start, startDownHandler, startUpHandler, statsEnabled, stop, stopInternal, up, upThreadEnabled

Constructor Details

UDP_NIO

public UDP_NIO()
Creates the UDP_NIO protocol, and initializes the state variables, does however not start any sockets or threads.

Method Details

determineAllBindInterfaces

public List determineAllBindInterfaces()
            throws SocketException

determineDefaultBindInterface

public String determineDefaultBindInterface()
            throws SocketException
Return the first non-loopback interface

down

public void down(Event evt)
Caller by the layer above this layer. Usually we just put this Message into the send queue and let one or more worker threads handle it. A worker thread then removes the Message from the send queue, performs a conversion and adds the modified Message to the send queue of the layer below it, by calling Down).
Overrides:
down in interface Protocol

getName

public String getName()
Overrides:
getName in interface Protocol

init

public void init()
            throws Exception
Overrides:
init in interface Protocol

main

public static void main(String[] args)

receive

public void receive(DatagramPacket packet)

setProperties

public boolean setProperties(Properties props)
Setup the Protocol instance acording to the configuration string. The following properties are being read by the UDP protocol:
  • param mcast_addr - the multicast address to use default is 224.0.0.200
  • param mcast_port - (int) the port that the multicast is sent on default is 7500
  • 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 interface Protocol
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

start

public void start()
            throws Exception
Creates the unicast and multicast sockets and starts the unicast and multicast receiver threads
Overrides:
start in interface Protocol

startUpHandler

public void startUpHandler()
This prevents the up-handler thread to be created, which essentially is superfluous: messages are received from the network rather than from a layer below. DON'T REMOVE !
Overrides:
startUpHandler in interface Protocol

stop

public void stop()
Overrides:
stop in interface Protocol

toString

public String toString()
debug only

up

public void up(Event evt)
handle the UP event.
Overrides:
up in interface Protocol
Parameters:
evt - - the event being send from the stack

Copyright B) 1998-2005 Bela Ban. All Rights Reserved.