All Downloads are FREE. Search and download functionalities are using the official Maven repository.

bboss.org.jgroups.protocols.TCP_NIO Maven / Gradle / Ivy

The newest version!
package bboss.org.jgroups.protocols;

import java.net.InetAddress;
import java.util.Collection;

import bboss.org.jgroups.Address;
import bboss.org.jgroups.PhysicalAddress;
import bboss.org.jgroups.annotations.Experimental;
import bboss.org.jgroups.annotations.ManagedAttribute;
import bboss.org.jgroups.annotations.Property;
import bboss.org.jgroups.annotations.Unsupported;
import bboss.org.jgroups.blocks.BasicConnectionTable;
import bboss.org.jgroups.blocks.ConnectionTableNIO;

/**
 * Transport using NIO
 * @author Scott Marlow
 * @author Alex Fu
 * @author Bela Ban
 * @version $Id: TCP_NIO.java,v 1.29 2009/12/11 13:07:38 belaban Exp $
 */
@Experimental @Unsupported
public class TCP_NIO extends BasicTCP implements BasicConnectionTable.Receiver
{

    /*
    * (non-Javadoc)
    *
    * @see bboss.org.jgroups.protocols.TCP#getConnectionTable(long, long)
    */
   protected ConnectionTableNIO getConnectionTable(long ri, long cet,
                                                   InetAddress b_addr, InetAddress bc_addr,
                                                   int s_port, int e_port) throws Exception {
       ConnectionTableNIO retval=null;
       if (ri == 0 && cet == 0) {
           retval = new ConnectionTableNIO(this, b_addr, bc_addr, s_port, e_port, false );
       }
       else {
           if (ri == 0) {
               ri = 5000;
               if(log.isWarnEnabled()) log.warn("reaper_interval was 0, set it to " + ri);
           }
           if (cet == 0) {
               cet = 1000 * 60 * 5;
               if(log.isWarnEnabled()) log.warn("conn_expire_time was 0, set it to " + cet);
           }
           retval = new ConnectionTableNIO(this, b_addr, bc_addr, s_port, e_port, ri, cet, false);
       }
       retval.setThreadFactory(getThreadFactory());
       retval.setProcessorMaxThreads(getProcessorMaxThreads());
       retval.setProcessorQueueSize(getProcessorQueueSize());
       retval.setProcessorMinThreads(getProcessorMinThreads());
       retval.setProcessorKeepAliveTime(getProcessorKeepAliveTime());
       retval.setProcessorThreads(getProcessorThreads());
       retval.start();
       return retval;
   }

    public String printConnections()     {return ct.toString();}

    protected PhysicalAddress getPhysicalAddress() {
        return ct != null? (PhysicalAddress)ct.getLocalAddress() : null;
    }

   public void send(Address dest, byte[] data, int offset, int length) throws Exception {
      ct.send(dest, data, offset, length);
   }

   public void start() throws Exception {
       ct=getConnectionTable(reaper_interval,conn_expire_time,bind_addr,external_addr,bind_port,bind_port+port_range);
       ct.setUseSendQueues(use_send_queues);
       // ct.addConnectionListener(this);
       ct.setReceiveBufferSize(recv_buf_size);
       ct.setSendBufferSize(send_buf_size);
       ct.setSocketConnectionTimeout(sock_conn_timeout);
       ct.setPeerAddressReadTimeout(peer_addr_read_timeout);
       ct.setTcpNodelay(tcp_nodelay);
       ct.setLinger(linger);
       super.start();
   }

   public void retainAll(Collection
members) { ct.retainAll(members); } public void stop() { ct.stop(); super.stop(); } public int getReaderThreads() { return reader_threads; } public int getWriterThreads() { return writer_threads; } public int getProcessorThreads() { return processor_threads; } public int getProcessorMinThreads() { return processor_minThreads;} public int getProcessorMaxThreads() { return processor_maxThreads;} public int getProcessorQueueSize() { return processor_queueSize; } public long getProcessorKeepAliveTime() { return processor_keepAliveTime; } @ManagedAttribute public int getOpenConnections() {return ct.getNumConnections();} @Property private int reader_threads= 3; @Property private int writer_threads= 3; @Property private int processor_threads= 5; // PooledExecutor.createThreads() @Property private int processor_minThreads= 5; // PooledExecutor.setMinimumPoolSize() @Property private int processor_maxThreads= 5; // PooledExecutor.setMaxThreads() @Property private int processor_queueSize=100; // Number of queued requests that can be pending waiting // for a background thread to run the request. @Property private long processor_keepAliveTime= Long.MAX_VALUE; // PooledExecutor.setKeepAliveTime( milliseconds); // negative value used to mean (before 2.5 release) to wait forever, // instead set to Long.MAX_VALUE to keep alive forever private ConnectionTableNIO ct; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy