aprendizaje Netty - se inicia el servidor (sin terminar)

Primer vistazo a un lado del servidor Netty, iniciar la demostración

tipo servidor {public 
 
    void main (String [] args) public static lanza excepción { 
        // el grupo de hilos servidor de configuración NIO 
        @ hilo jefe detector para el conjunto de eventos de red 
        EventLoopGroup bossGroup nuevo nuevo NioEventLoopGroup = (1.); 
        // grupo subproceso de trabajo la red de escritura para SocketChannel 
        EventLoopGroup workerGroup nueva nueva NioEventLoopGroup = (); 
 
        el try { 
            // la clase servidor NIO de la ayuda para el arranque, tiene como objetivo reducir la complejidad de desarrollar el lado del servicio 
            de ServerBootstrap de ServerBootstrap nuevo nuevo B = (); 
            grupo // configurar dos hilos 
            b.group (bossGroup, workerGroup) 
                    // configurar el servidor de Canal 
                    .Channel (NioServerSocketChannel.class) 
                    propiedades // configurar TCP básicos
                    .childOption (ChannelOption.TCP_NODELAY, true)
                    Los atributos básicos // Enlazar el cliente para crear una conexión 
                    .childAttr (AttributeKey.newInstance ( "childAttr"), "childAttrValue") 
                    // Configurar el procesador lógico proceso de inicio del servidor 
                    .handler (nueva nueva ServerHandler ()) 
                    // procesos de negocio de configure la cadena de tuberías Handler 
                    .childHandler (nueva nueva ChannelInitializer <la SocketChannel> () { 
                        @Override 
                        public void initchannel (el SocketChannel CH) { 
                            // manipulador de procesamiento de servicios de configuración, un flujo de datos de lectura y escritura proceso 
                            // ch.pipeline (). addLast () 
 
                        } 
                    }); 
 
            lógica // anterior son algunos de los atributos de configuración, el servidor comienza el verdadero comienzo aquí
            // unen el puerto, el lanzamiento oficial de los servicios de servidor 
            ChannelFuture f = b.bind (8888) .sync (); 
            // espera hasta que la sincronización cerrado el puerto de escucha del servidor 
            f.channel () closeFuture () sincronización ( ) ..; 
        un finally {} 
            // salida elegante, la liberación de los recursos de uso de hilo 
            bossGroup.shutdownGracefully (); 
            workerGroup.shutdownGracefully (); 
        } 
    } 
 
}

ServerHandler

ServerHandler clase ública extiende ChannelInboundHandlerAdapter { 
    @ Override 
    pública channelActive vacío (ChannelHandlerContext CTX) { 
        System.out.println ( "channelActive"); 
    } 
 
    @Override 
    public void channelRegistered (ChannelHandlerContext CTX) { 
        System.out.println ( "channelRegistered"); 
    } 
 
    @Override 
    public void handlerAdded (ChannelHandlerContext CTX) { 
        System.out.println ( "handlerAdded"); 
    } 
 
    @ Override 
    pública channelRead vacío (CTX ChannelHandlerContext final, msg Objeto) throws Exception { 
        super.channelRead (CTX, msg); 
 
        Tema nuevo (nuevo Ejecutable () {
            @Anular
            public void run () { 
                //耗时的操作
                resultado String = loadFromDB (); 
 
                . ctx.channel () writeAndFlush (resultado); 
                . ctx.executor () horario (nueva Ejecutable () { 
                    @Override 
                    public void run () { 
                        // ... 
                    } 
                }, 1, TimeUnit.SECONDS); 
 
            } 
        .}) Start (); 
    } 
 
    LoadFromDB privada String () { 
        return "Hola mundo!"; 
    } 
}

 

Cuando Netty Crear servidor Channel, accesible desde el método ServerBootstrap bind lado de servicio y similares, es la creación de la función de la figura en la cadena del servidor Channel. En el código posterior creado por el modo de reflexión canal servidor, lo que refleja el método de funcionamiento de crear el servidor generador de objetos newChannel canal para crear el método Canal fábrica de objetos de servidor de determinar la clase de canal ServerBootstrap.

 

En el proceso de creación del lado de servicio del canal, el código anterior se pasa clase NioServerSocketChannel.class clase, esta clase se determina por su método Channel () en la configuración de ServerBootstrap, por lo que la clase de canal de creación del objeto servidor es NioServerSocketChannel el objeto se llama cuando una instancia de esta clase y NioServerSocketChannel su serie constructor de la clase padre, este proceso va a crear JDK JDK fondo del canal del pozo para hacer un poco de inicialización básica, tales como ajustar el modo de servidor de canal de bloqueo, crear un canal del lado del servidor del ello, insegura, tuberías y otros miembros.

Cada vez que en un canal creado se le asignará un nuevo ChannelPipeline, esta asociación es permanente, ni canal adicional ChannelPipeline otra, no puede separarse de su corriente. estructura de la cadena ChannelPipeline para almacenar ChannelHandlerContext, al comienzo de ChannelPipeline creación creará dos nodos: cabeza, nodo de cola, y luego más llamada de seguimiento se puede añadir addLast método ChannelPipeline cuando se agrega ChannelHandler ChannelPipeline, el proceso se ChannelHandler empaquetado como ChannelHandlerContext, y después se añadió a la misma.

 

servicio de canalización creada después del final del canal se inicializará, que es probablemente la obra de salvar los atributos definidos por el usuario, y luego configurar el lado del servicio de la tubería, y luego crear un acceso atributo de conexión guardada por el usuario, y agregarlo al servidor , cada vez que un acceso a aceptar la conexión después de una nueva conexión va a utilizar estos atributos para hacer alguna nueva configuración de la conexión.

Supongo que te gusta

Origin www.cnblogs.com/liekkas01/p/12650564.html
Recomendado
Clasificación