Sunday, October 11, 2015

Introduction to Netty


What is Netty ?

Netty is an open source Java NIO framework which can be used to develop network related applications.In this tutuorial I am going to exaplain basic architecture of the netty and how it is used to develop basic appilcations.  

Netty Concepts

  • Bootstraps
                  Bootstrapping is used to create netty channels which is  used to handle incoming  and outgoing connections and events through it. Basically inbound side consists of ServerBootstrap. ServerBootstrap is used to configure and create channels (TCP , HTTP .. etc)  for incoming client connections.  ServerBootstrap is extended from Bootstrap which can be used to configure client Bootstrap as well.  Client Bootstrap is used to  make connections  with backend servers.
example :-
// Configure the server.
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup(4);
try {
  ServerBootstrap b = new ServerBootstrap();
  b.option(ChannelOption.SO_BACKLOG, 1024);
  b.group(bossGroup, workerGroup)
   .channel(NioServerSocketChannel.class)
   .handler(new LoggingHandler(LogLevel.INFO))
   .childHandler(new ServerInitializer());

  Channel ch = b.bind(PORT).sync().channel();

  System.err.println("Open your web browser and navigate to " +
          (SSL? "https" : "http") + "://127.0.0.1:" + PORT + '/');

  ch.closeFuture().sync();
} finally {
  bossGroup.shutdownGracefully();
  workerGroup.shutdownGracefully();
}

Here we are creating ServerBootstrap and configure with transport level parameters. You can see that it has given with two eventloop groups called master and worker. It is explained in the following sections. Basically it used for handle incoming connections.

  • EventLoop and EventLoopGroup

EventLoop is like a Java thread which is used to handle connections. There are varoiuse EventLoop implementations in netty such NioEventLoop , UDPDatagramEventLoop .. etc. EventLoopGroup is a collection of Event Loops. Basically we can define how many Event Loops should be included in the EventLoopGroup when it is creating.  When creating ServerBootstrap we have given that Master and Worker EventLoopGroups. Master EventLoopGroup is responsible for accepting incoming connections and Worker EventLoopGroup is responsible for handling IO operations of the accepted connections.Each accepted connection is bound to particular Worker EventLoop for its life time.

  • Channel and ChannelHandlerContext
 Netty channel is a  representation of an accepted connection.Netty channel is bound to a one particular  EventLoop for it is life time.  For each channel netty creates a channel pipeline and I will discuss it in the following sections. we can save attributes in channel  which can be retrieved in later calls of the channel. ChannelHandlerContext is unique for each handler in the pipeline. handler concept also describes in later part of this tutorial.  

  • Channel Handlers

Basically netty has Inbound and Outbound handlers.   Inbound handlers are executed when IO events are read from socket to application and Outbound handlers are executed when IO events are written from application to socket. Netty Handlers can be shared with netty pipelines but the recommended approach is not share handlers .Handler  has a specific logic to do some applications specific logic with incoming messages it can be a byte to message conversion , message to message conversion or message to byte conversion. There can be multiple handlers executed inside a netty pipeline.


  • Netty Pipeline
              Pipeline is a representation of a message flow of particular accepted connection. Handlers can be  integrated into pipeline and for each connection it creates a pipeline.  All the handlers in pipeline are thread safe instead if  handler is shared. Following is the sample code for pipeline creation.

public class ServerInitializer extends ChannelInitializer<SocketChannel> {

  
   @Override
  public void initChannel(SocketChannel ch) {
      ChannelPipeline p = ch.pipeline();
            p.addLast(new HttpServerCodec());
      p.addLast(new ServerHandler());
  }
}


Handlers in the pipeline are executed according to the integrated positions in the pipeline. But in Inbound path Inbound Handlers are only executed accordingly and in Outbound direction Outbound Handlers are executed.

  • Important Facts

   Do not block the handler execution throughout the handler implementation code. If handler is got blocked,  the underlying Event Loop which is executing that pipeline will be blocked. So it will affect the IO WorkerPool of netty to be get  overloaded and ultimate connection processing will be delayed.

You can execute Netty Handler in a separate WorkerPool  by providing executorservice when adding it to the channel pipeline as follows.

p.addLast(“executorservice” ,new ServerHandler());




       










1 comment:

  1. đồng tâm
    game mu
    cho thuê nhà trọ
    cho thuê phòng trọ
    nhac san cuc manh
    số điện thoại tư vấn pháp luật miễn phí
    văn phòng luật
    tổng đài tư vấn pháp luật
    dịch vụ thành lập công ty trọn gói
    lý thuyết trò chơi trong kinh tế học
    đức phật và nàng audio
    hồ sơ mật dinh độc lập audio
    đừng hoang tưởng về biển lớn ebook
    chiến thắng trò chơi cuộc sống ebook
    bước nhảy lượng tử
    ngồi khóc trên cây audio
    truy tìm ký ức audio
    mặt dày tâm đen audio
    thế giới như tôi thấy ebook

    Trung niên nam tử nghe vậy cả kinh hỏi:

    - Bạch Thọ, những điều ngươi nói, ngươi….


    Nam tử áo xám tự hào trả lời:

    - Chính là như vậy, đại nhân, tối qua thuộc hạ liên tục quần thảo với hai nữ nhân, quả thực là thống khoái….


    “Đại nhân, ngày mai tại Túy Xuân lâu vẫn còn biểu diễn Vũ thoát y, người cũng nên đến đó xem một lần cho biết.” Nam tử áo xám dò hỏi.
    Trung niên nam tử trong mắt lộ ra ánh mắt thích thú, nhẹ giọng nói:

    - Ngươi an bài cho ta?
    ……………….
    Cảnh tượng hoàng hôn lúc này thật đẹp. Từng cụm mây hồng từ phía chân trời, mang theo những tia nắng cuối cùng, nhè nhẹ trôi lững lờ làm đỏ rực cả một góc trời.

    Lưu Phong ăn cơm tối xong, dặn dò Liễu Thanh Nghi đêm nay không cần massage chân. Đóng cửa phòng, hắn lập tức thay một bộ y phục dạ hành, nhắm mắt tĩnh dưỡng.

    Đợi cho đến lúc mặt trời hoàn toàn khuất hẳn, Lưu Phong lúc này mới mở cửa sổ phi thân ra ngoài. Chìm vào trong đêm tối.

    Đêm nay Lưu Phong muốn tự mình muốn chứng thực chuyện hôn nhân của mình. Hắn muốn đến phủ Tổng đốc chứng thực xem Ân Tố Tố có phải là ‘thạch nữ’ (phụ nữ bất thường, không thể xxx hoặc sinh đẻ) hay không.

    Về phương pháp để nhận biết xem nàng có phải là thạch nữ hay không thì kỳ thật Lưu Phong cũng không nắm chắc lắm. Dựa theo suy nghĩ của hắn thì chỉ cần quan sát xem cơ thể của nàng bình thường, cơ quan sinh dục của nàng cũng bình thường như bao người con gái khác là được. Có lỗ ắt sẽ đút vào được.(thèng này suy luận hay thật)

    Màn đêm buông xuống. Phủ Tổng đốc được canh phòng cẩn mật. Cứ năm thước lại có một chòi canh, mười lăm thước lại có một đội quân đi tuần, khắp nơi treo đầy đèn lồng, ánh sáng phát ra sang như ban ngày. Bất quá, đối với dạng cao thủ tu chân như Lưu Phong thì những thứ này chẳng có gì là đáng kể.

    ReplyDelete