Class NioServer

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, ConnectionListener

    public class NioServer
    extends NioBaseServer
    Server for sending and receiving messages via NIO channels. Uses only a single thread to accept, connect, write and read connections. Read messages are passed to a receiver, which typically uses a thread pool to process messages.

    Note that writes can get dropped, e.g. in the case where we have a previous write pending and a new write is received. This is typically not an issue as JGroups retransmits messages, but might become one when using NioServer standalone, ie. outside of JGroups.

    Since:
    3.6.5
    Author:
    Bela Ban
    • Field Detail

      • channel

        protected java.nio.channels.ServerSocketChannel channel
    • Constructor Detail

      • NioServer

        public NioServer​(IpAddress bind_addr)
                  throws java.lang.Exception
        Creates an instance of NioServer.
        Parameters:
        bind_addr - The local bind address and port. If null, a bind address and port will be picked by the OS.
        Throws:
        java.lang.Exception
      • NioServer

        public NioServer​(java.net.InetAddress bind_addr,
                         int port)
                  throws java.lang.Exception
        Creates an instance of NioServer that opens a server channel and listens for connections. Needs to be started next.
        Parameters:
        bind_addr - The local address to bind to. If null, the address will be picked by the OS
        port - The local port to bind to
        Throws:
        java.lang.Exception - Thrown if the creation failed
      • NioServer

        public NioServer​(ThreadFactory thread_factory,
                         SocketFactory socket_factory,
                         java.net.InetAddress bind_addr,
                         int srv_port,
                         int end_port,
                         java.net.InetAddress external_addr,
                         int external_port)
                  throws java.lang.Exception
        Creates an instance of NioServer that opens a server channel and listens for connections. Needs to be started next.
        Parameters:
        thread_factory - The thread factory used to create new threads
        socket_factory - The socket factory used to create socket channels
        bind_addr - The local address to bind to. If null, the address will be picked by the OS
        srv_port - The local port to bind to If 0, the port will be picked by the OS.
        end_port - If srv_port is taken, the next port is tried, until end_port has been reached, in which case an exception will be thrown. If srv_port == end_port, only 1 port will be tried.
        external_addr - The external address in case of NAT. Ignored if null.
        external_port - The external port on the NA. If 0, srv_port is used.
        Throws:
        java.lang.Exception - Thrown if the creation failed
    • Method Detail

      • handleAccept

        protected void handleAccept​(java.nio.channels.SelectionKey key)
                             throws java.lang.Exception
        Overrides:
        handleAccept in class NioBaseServer
        Throws:
        java.lang.Exception
      • start

        public void start()
                   throws java.lang.Exception
        Description copied from class: BaseServer
        Starts accepting connections. Typically, socket handler or selectors thread are started here.
        Overrides:
        start in class BaseServer
        Throws:
        java.lang.Exception
      • stop

        public void stop()
        Description copied from class: BaseServer
        Stops listening for connections and handling traffic. Typically, socket handler or selector threads are stopped, and server sockets or channels are closed.
        Overrides:
        stop in class BaseServer