Class OioClientSocketChannelFactory

  • All Implemented Interfaces:
    ChannelFactory, ClientSocketChannelFactory, ExternalResourceReleasable

    public class OioClientSocketChannelFactory
    extends Object
    implements ClientSocketChannelFactory
    A ClientSocketChannelFactory which creates a client-side blocking I/O based SocketChannel. It utilizes the good old blocking I/O API which is known to yield better throughput and latency when there are relatively small number of connections to serve.

    How threads work

    There is only one type of threads in OioClientSocketChannelFactory; worker threads.

    Worker threads

    Each connected Channel has a dedicated worker thread, just like a traditional blocking I/O thread model.

    Life cycle of threads and graceful shutdown

    Worker threads are acquired from the Executor which was specified when a OioClientSocketChannelFactory was created (i.e. workerExecutor.) Therefore, you should make sure the specified Executor is able to lend the sufficient number of threads.

    Worker threads are acquired lazily, and then released when there's nothing left to process. All the related resources are also released when the worker threads are released. Therefore, to shut down a service gracefully, you should do the following:

    1. close all channels created by the factory usually using ChannelGroup.close(), and
    2. call releaseExternalResources().
    Please make sure not to shut down the executor until all channels are closed. Otherwise, you will end up with a RejectedExecutionException and the related resources might not be released properly.

    Limitation

    A SocketChannel created by this factory does not support asynchronous operations. Any I/O requests such as "connect" and "write" will be performed in a blocking manner.