aprendizaje Netty - componentes básicos

uso Netty marco de código abierto

Dubbo: Ali de código abierto, de alto rendimiento RPC marco de las comunicaciones

RocketMQ: Ali produjo cola de mensajes de alto rendimiento

Spark: el procesamiento de un motor de cálculo diseñado para datos a gran escala

Elasticsearch, Cassandra, Flink, Netty-SocketIO, Spring5, Juego, GRPC ...

 

Lo que es Netty

  • marco orientado a eventos asíncrono para los usuarios desarrollar rápidamente servidor de alto rendimiento y el cliente
  • JDK y encapsula el modelo BIO NIO subyacente, proporcionando alta disponibilidad de la API
  • Viene códec de desempaquetar el paquete palo para resolver el problema, los usuarios sólo se preocupan por la lógica de negocio
  • modelo de reactor de roscado diseñado para soportar alta conexión simultánea de masas
  • Viene con una variedad de pila de protocolos puede manejar cualquier tipo de común acuerdo no tienen práctica en

componentes básicos Netty

En el caso de ausencia de Netty, la comunicación entre el cliente y el servidor


ServerBoot public class { static final privado int PORT = 8000; public static void main (String [] args) {
   //启动一个servidor servidor servidor = nuevo Servidor (PORT); server.start (); } }

El código de servidor como sigue:

servidor de clase {public 

    ServerSocket ServerSocket privada; 

    servidor público (int puerto) { 
        try { 
       // puerto de enlace de acuerdo con el número de puerto this.serverSocket = new nueva ServerSocket (Puerto); System.out.println ( "El servidor se ha iniciado satisfactoriamente, puerto:" port +); } el catch (IOException Excepción) { System.out.println ( "el servidor no pudo iniciar"); } } // crear el hilo principal de la aplicación para evitar el bloqueo ServerBoot el servidor, por lo que el monitor de puerto en un hilo separado en el inicio public void () { new new Thread (Runnable nueva nueva () { @Override public void run () { el doStart (); } }). Inicio (); } // recepción de cliente está conectado

anular la doStart privada () { el while (true) { el try {
          // el cliente está conectado al receptor, Aceptar un método de bloqueo, cuando un cliente antes de crear más de zócalo el Socket = serverSocket.accept Client ();
        // socket evitar lectura serverSocket.accept bloqueo, por lo que la necesidad de crear un hilo ClientHandler nueva nueva ClientHandler (Cliente) .start (); } el catch (IOException e) { System.out.println ( "servidor de excepción"); } } } }

 

ClientHandler código es el siguiente:

ClientHandler {public class 

    int public static MAX_DATA_LEN final = 1,024; 
// Guardar cliente Socket privada final de la ranura; ClientHandler pública (la ranura) { this.socket = zócalo; } public void start () { System.out.println ( " nuevo acceso de cliente "); nuevo nuevo la rosca (el Ejecutable nueva nueva () { @Override public void run () { el doStart (); } .}) Inicio (); } privada desierta la doStart () { try { InputStream flujoEntrada = zócalo. getInputStream ();
       // comunicación cliente y el servidor while (true) { byte [] datos = new byte [MAX_DATA_LEN]; int len; while ((len = inputStream.read (datos)) = -1) { String mensaje = new String (datos, 0, LEN); System.out.println ( "客户端传来消息:" + mensaje); socket.getOutputStream () escritura (datos).; } } } Catch (IOException e) { e.printStackTrace (); } } }

 

El código de cliente de cliente es el siguiente:

public class Cliente { 
    private static final String host = "127.0.0.1"; 
    private static final int PORT = 9010; 
    private static final int sleep_time = 5000; 

    public static void Main (args String []) throws IOException { 
        ranura final = nuevo socket (host, puerto); 

        Tema nuevo (nuevo Ejecutable () { 
            @Override 
            public void run () { 
                System.out.println ( "客户端启动成功!"); 
                while (true) { 
                    try { 
                        String mensaje = "Hola mundo"; 
                        System.out. println ( "客户端发送数据:" + mensaje); 
                        socket.getOutputStream ( ) .WRITE (message.getBytes ()); 
                    } catch (Exception e) {
                        System.out.println ( "写数据出错!"); 
                    } 
                    Sueño (); 
                } 


            } 
        .}) Start (); 

    } 

    Privada del sueño static void () { 
        try { 
            Thread.sleep (sleep_time); 
        } Catch (InterruptedException e) { 
            e.printStackTrace (); 
        } 
    } 
}

  

La lógica de cliente para comunicarse con el servicio:

 

punto de vista del servidor:

  1. En primer lugar, el servicio Puerto de monitoreo
  2. Por while (true) Continuar para aceptar el enlace, si el cliente crea una nueva conexión para conectarse al servidor, y luego por el procesador para las conexiones de clientes de mango
  3. El servidor recibe los datos
  4. la lógica de negocio del lado del servidor de procesamiento de hacer
  5. El servidor envía datos al cliente

 

Relación con los corresponde procedimiento anteriores netty siguiente componentes juntos:

 

Supongo que te gusta

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