Ejemplo Sencillo de TCP/IP con netty

De ChuWiki
Revisión del 14:58 1 ago 2018 de Chudiang (Discusión | contribuciones) (El Servidor)

Saltar a: navegación, buscar

Contenido

Netty es una librería Java que nos facilita todo el uso de sockets. Está pensada para ser eficiente y consumir pocos recursos, además de tener ya implementados bastantes protocolos estándar, ahorrándonos el trabajo de hacerlo a nosotros o buscar otras librerías.

Veamos aquí un ejemplo básico de cómo hacer un socket TCP/IP. Haremos un servidor que admitirá varios clientes, cada cliente enviará un texto periodicamente y el servidor se lo reenviará al resto de clientes. Lo haremos con lo básico de Netty, sin utilizar ninguno de los encoder o decoder que netty nos proporiciona.

Aquí tienes el código de ejemplo de socket tcp/ip con netty

El Servidor

En netty el código para abrir un socket servidor TCP/IP es más o menos siempre el mismo, copy-paste y lo explicamos un poco

int port = 8080; // El puerto que queramos

EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
EventLoopGroup workerGroup = new NioEventLoopGroup(); // (2)

try {
   ServerBootstrap b = new ServerBootstrap(); // (3)
   b.group(bossGroup, workerGroup)
      .channel(NioServerSocketChannel.class) // (4)
      .childHandler(new ChannelInitializer<SocketChannel>() { // (5)
          @Override
          public void initChannel(SocketChannel ch) throws Exception { // (6)
             ch.pipeline().addLast(serverHandler); // (7)
          }
      })
      .option(ChannelOption.SO_BACKLOG, 128)          // (8)
      .childOption(ChannelOption.SO_KEEPALIVE, true); // (9)
       
   ChannelFuture f = b.bind(port).sync(); // (10)

   f.channel().closeFuture().sync(); // (11)

Veamos todo esto

  • (1) Netty está orientado a eventos. Se producen eventos y se propagan cuando se abre una conexión, cuando se acepta un cliente, cuando se cierra una conexión, cuando llega un mensaje, etc, etc, etc. Todos estos eventos se tratan en un bucle de eventos en una serie de hilos que maneja netty. Netty tiene varias clases que implementan estos bucles de eventos con hilos, entre ellas NioEventLoopGroup. Así que lo primero que hacemos es crear una de estas para los eventos del socket servidor. Cada vez que se acepte una conexión de un cliente o se cierre, será este bucle de eventos en el encargado de detectarlo y avisar a todos los que tengan interés en ello.
  • (2) Idem a (1), pero es el bucle de eventos para los eventos de clientes ya conectados, cuando se envían o reciben mensajes de ellos, también cuando se desconecta un cliente concreto, etc. Resumiendo, (1) es para los eventos del socket servidor y (2) para los eventos en cada uno de los socket con los clientes.
  • (3)