Now the client code... As previously, any comment and correction ...

NioSocketConnector connector =  new NioSocketConnector(myNumberOfCpuPlusOne);
// Set connect timeout.
connector.setConnectTimeout(myTIMEOUTCON);

SocketSessionConfig config = (SocketSessionConfig) connector.getSessionConfig();
config.setReuseAddress(true); // XXX was false but is true better for client ?
//XXX VISTA BUG ? => setSoLinger and KeepAlive(true)
config.setSoLinger(1);
config.setKeepAlive(false); // true?
// No delay
config.setTcpNoDelay(true);
// set idle timeout
config.setIdleTime(IdleStatus.BOTH_IDLE, myTIMEOUT);
config.setReceiveBufferSize(myTCPBLOCKSIZE);
config.setSendBufferSize(myTCPBLOCKSIZE);

DefaultIoFilterChainBuilder chain = connector.getFilterChain();
CompressionFilter compression =
                new CompressionFilter(serverCompressed,
                        clientCompressed,
                        CompressionFilter.COMPRESSION_MAX);
chain.addFirst("Compression",compression);
ExecutorService executorChainService = new 
OrderedThreadPoolExecutor(myNbClient_THREAD); 
// was Executors.newCachedThreadPool();
ExecutorFilter executorChainFilter = new ExecutorFilter(executorChainService);
chain.addLast("SerializePool", executorChainFilter);
ProtocolCodecFactory codec = new ObjectSerializationCodecFactory();
chain.addLast("Serialize",    new ProtocolCodecFilter(codec));
connector.setHandler(new MyIoHandlerAdapter());

// IoBuffer
IoBuffer.setUseDirectBuffer(false);
ioBufferAllocator = new SimpleBufferAllocator();
IoBuffer.setAllocator(ioBufferAllocator);

// Connection
IoSession ioSession = null;
try {
    ConnectFuture future = connector.connect(inetSocketAddress);
    if (future != null) {
        future.awaitUninterruptibly();
        IoSession ioSession = future.getSession();
        if (ioSession == null) {
            // Problem of connection !
        }
    }
} catch( RuntimeIoException e ) {// Connector is ko=>retry later on
    ioSession = null;
}
if (ioSession != null) {
    // set idle timeout
    // Change from Trunk 6 month ago : it seems to be now in 
SocketSessionConfig directly
    /*ioSession.setIdleTime(IdleStatus.BOTH_IDLE,
                        LSDConstants.TIMEOUT);*/
}


And shutting down :
if (ioBufferAllocator != null)
   ioBufferAllocator.dispose();
ioBufferAllocator = null;
if (executorChainFilter != null) {
    executorChainFilter.shutdownNow();
    executorChainFilter = null;
}

Frederic

Reply via email to