Análisis del código fuente de Netty (1)

Hoy es el capítulo trece de los "365 proyectos originales" de Ape Lighthouse.

 

En el siguiente tiempo, Beacon Jun continúa actualizando la serie Netty, un total de nueve artículos.

 

Actual: Comienza el análisis del código fuente de Netty (1)

Análisis del código fuente de Netty (2): Netty Channel

Análisis del código fuente de Netty (3): Netty Future and Promise

Análisis del código fuente de Netty (4): ChannelPipeline of Netty

Análisis del código fuente de Netty (5): análisis del grupo de hilos de Netty

Análisis del código fuente de Netty (6): operación de registro de canales

Análisis del código fuente de Netty (7): flujo de trabajo de NioEventLoop

Análisis del código fuente de Netty (ocho): volver a la operación de registro de canales

Análisis del código fuente de Netty (9): conecta el proceso y vincula el análisis del proceso

 

Hoy! Dengta Jun te dijo:  

 

Análisis del código fuente de Netty (1)


 

Prefacio : Este artículo presentará Netty, el paquete NIO más utilizado en la plataforma Java. Es una capa de encapsulación de la implementación NIO en el JDK, lo que nos permite desarrollar programas NIO de manera más conveniente. De hecho, Netty no es solo NIO, sino que básicamente todos vienen a NIO.

 

Dengta Jun siente que la jactancia doméstica sobre Netty es demasiado, principalmente porque muchas personas confían en ella para la cena, ya sea entrenando o publicando, y deseo volar a Netty al cielo. Hace que los principiantes sientan que Netty es lo mismo que la tecnología avanzada.

 

El código fuente de Netty no es muy simple, porque es relativamente grande y la relación entre varias clases es compleja. Muchas personas dicen que su código fuente es muy bueno. Beacon Jun cree que es promedio. Es bonito, y cada línea es la esencia, pero son de diferentes tipos y no hay nada que comparar.

 

El código fuente de Netty es bueno, porque su interfaz es más flexible, a menudo la interfaz es fácil de usar, el código fuente no será demasiado simple.

 

Este artículo se basará en el análisis del código fuente, si el lector tiene algún conocimiento de Netty, o lo usó, sería mejor.

 

  • Este artículo solo presenta contenido relacionado con TCP, el soporte de Netty para otros protocolos está más allá del alcance de este artículo.
  • A diferencia del análisis del código fuente de los paquetes concurrentes, no puedo decir el código fuente línea por línea, por lo que algunas excepciones se omitirán directamente, a menos que piense que es necesario introducirlo.
  • El código fuente de Netty se ha actualizado y existen algunas diferencias entre las versiones. Lo presenté de acuerdo con la última versión 4.1.25. Final del 06/09/2018.

 

Se recomienda que después de leer este artículo, los principiantes puedan pasar por "Netty In Action" y la versión de texto en chino también se pueda encontrar en línea.

 

 

1. Preparación


Para aprender el código fuente, definitivamente es el entorno de preparación al principio.

A Dengjun le gusta usar maven y también le gusta Spring Boot, así que generalmente voy a https://start.spring.io/ para preparar el andamiaje más simple.

Obtenga el andamiaje en 10 segundos y luego impórtelo a Intellij. Si usa la nueva versión de Spring Boot, es posible que también deba esperar las dependencias de descarga. Durante este período, abra https://mvnrepository.com/ y busque las dependencias de Maven que usará pronto.

Netty se divide en varios módulos, incluidos netty-handler, netty-buffer, netty-transport, netty-common, etc. También hay un netty-all, que contiene todos los módulos.

Como estamos analizando el código fuente, es natural usar el más simple. Netty-all no es la mejor opción, netty-example es:

1 <dependency> 2 <groupId> io.netty </groupId> 3 <artifactId> netty-example </artifactId> 4 <version> 4.1.25.Final </version> 5 </dependency>

 

No solo puede resolver nuestras dependencias, sino que los ejemplos de ejemplo son muy adecuados para que aprendamos a usarlos.

 

 

2. Ejemplo de eco


Como biblioteca NIO, Netty puede aceptar solicitudes como servidor o iniciar solicitudes como cliente. Usar Netty para desarrollar un cliente o servidor es muy simple. Netty hace un muy buen paquete. O se utilizan múltiples controladores para procesar nuestra lógica personalizada.

A continuación, echemos un vistazo a un ejemplo que vemos a menudo: se llama Eco, es decir, eco, qué valor pasa el cliente y qué valor devuelve el servidor tal como está.

Abra el código fuente de netty-example y copie el código debajo del paquete echo para reproducir.
El izquierdo es el código del servidor, el derecho es el código del cliente.

El código anterior es básicamente el código de la plantilla. Cada uso es una rutina. Las únicas partes que deben desarrollarse son los controladores especificados en los métodos handler (...) y childHandler (...), como EchoServerHandler y EchoClientHandler , por supuesto. El código fuente de Netty también nos proporciona una gran cantidad de controladores, como el LoggingHandler anterior, que se nos proporciona en el código fuente de Netty, y se puede usar directamente cuando sea necesario.

 

Echemos un vistazo a algunos de los contenidos involucrados en el código anterior:

  • La clase ServerBootstrap se usa para crear instancias de servidor, y Bootstrap se usa para crear instancias de cliente.
  • Dos EventLoopGroup: bossGroup y workerGroup, están relacionados con el modelo de hilos de Netty. Puede ver que hay dos grupos en el lado del servidor y solo uno en el lado del cliente.
  • Channel in Netty no utiliza directamente ServerSocketChannel y SocketChannel nativos de Java, sino que envuelve NioServerSocketChannel y NioSocketChannel correspondientes.
 Por supuesto, también hay soporte para otros protocolos, como NioDatagramChannel que admite el protocolo UDP. Este artículo solo se preocupa por TCP.
  • El método del controlador (...) a la izquierda especifica un controlador (LoggingHandler), que se utiliza para procesar cuando el servidor recibe una nueva solicitud, y el método del controlador (...) a la derecha especifica que el cliente necesita procesar la solicitud. Manipuladores usados.
Si desea especificar varios controladores en EchoServer, también puede usar ChannelInitializer como EchoClient a la derecha
  • ChildHandler (...) a la izquierda especifica childHandler. Los manejadores aquí son para conexiones recién creadas. Sabemos que después de aceptar una conexión, ServerSocketChannel necesita crear una instancia de SocketChannel. El manejador configurado en childHandler (...) es Maneje SocketChannel recién creado, no utilizado para tratar con la instancia de ServerSocketChannel.
  • tubería: el controlador puede especificar múltiples (necesita la clase ChannelInitializer anterior para ayudar), formarán una tubería, en realidad son similares al concepto de interceptor, ahora solo recuerde que cada instancia de NioSocketChannel o NioServerSocketChannel tendrá una tubería de instancia de tubería dentro La orden de ejecución del controlador también está involucrada.
  • ChannelFuture: Esto implica la programación asincrónica en Netty, similar a la interfaz Future en el JDK.

 

Para los lectores que no conocen Netty, no tienen ninguna presión. Lighthouse Jun los presentará uno por uno. Este artículo es principalmente para principiantes. A Lighthouse Jun le resulta más difícil de entender o una parte más importante, y dedicará más espacio para presentarlo con claridad.

El código fuente anterior no muestra el procesamiento del envío y la recepción de mensajes, esta parte del faro se introducirá después de introducir el contenido anterior.

A continuación, presentaremos estos contenidos en bloques. En vista del hecho de que los lectores pueden tener diversos grados de comprensión de NIO o Netty, Dengta Jun necesita ser detallado para cuidar a los principiantes en muchos lugares, por lo que espero que los lectores lean sección por sección y puedan leer adecuadamente el contenido con el que están familiarizados. Esperamos!

 

365 días de productos secos están constantemente disponibles, puede buscar "Ape Lighthouse" en WeChat para leer la primera vez, responder [Información] [Entrevista] [Reanudar] Hay materiales de entrevistas y plantillas de currículums para las fábricas de primera línea que preparé.

 

Supongo que te gusta

Origin www.cnblogs.com/yuandengta/p/12758736.html
Recomendado
Clasificación