学习笔记--关于netty

笔记于---书籍《netty in action 》第五版

书籍中会使用到的知识点:

  ----1,关于nio 的知识;

  ----2,关于多线程的知识及ExecutorService 方面的知识;

  ----3,关于网络编程的知识。

  ----4,关于网络协议方面的知识。

  ----5,关于加密TLS、SSL方面的知识。

目前使用的4中IO模型,同步阻塞IO、同步非阻塞IO、多路复用IO模型、异步IO(信号驱动IO)

  需要理解kernel 和用户态空间。这个是操作系统方面的知识。我们的Application 在进行IO操作的时候,会首先向操作系统请求该IO操作。如果被允许,用户态和kernel中的数据将会切换。这就是为什么多线程会消耗更多的系统资源的原因。

在这几种模型中设计的理念是不一样的。

   @同步阻塞IO:对于同步阻塞IO 。用户态这边会发出一个请求比如socket连接,向连接的socket发出read请求的数据,这时,kernel会 调用网络物理设备的接口,当有连接请求建立好后,会接受完数据,此时用户态这边依然阻塞,等kernel将数据切换给用户态后,用户态这边阻塞才结束,开始处理数据。

 @同步非阻塞IO   与上面不同的是,当请求发给kernel时候,会立即返回,然后不停轮询kernel是否数据准备好,如果准备好,此时将会阻塞,不会立即返回。

 @多路复用IO模型:主要使用系统的select 或epoll 调用。用户态这边会将他所需要的option注册给系统的select或epoll,此过程进程会阻塞,当有连接建立后。等kernel准备好数据。切换给用户态这边,依然会阻塞。

 @异步IO: 用户态这边将建立一个信号处理程序,用户态这边没阻塞,内核这边数据准备好会给用户态一个信号来read处理数据。此时从kernel 将数据切换给用户态,用户态都会阻塞。

在netty in action 书中第一章将NIO1和NIO2 列出来,其实就是对多路复用IO和异步IO的比较。

在java  APi 中关于package nio 的知识,可以详细看document。其中主要涉及到几个重要的概念concept

  Channel 

  ByteBuffer

  Selector

理解多路复用IO模型对于他的编程使用无疑是有巨大帮助的。

比如书中的代码。

  

ServerSocketChannle server = ServerSocketChannel.open();
server.bind(new InetAddress(port));
server.configureBlocking(false);
Selector selector = Selector.open();
server.register(selector,SelectorKey.OP_ACCEPT);
whlie(ture){
   try{
        selector.select();  
    }catch(IOException ex){
        ex.printStackTrace();
        break;  
    }
    Set key =(SelectionKey) selector.selectKeys();
    Iterator iterator = key.iterator();
   while(iterator.hasNext()){
         SelectionKey selectionKey = (SelectionKey)iterator.next(); 
         iterator.remove();
        try{
            //对option进行操作的,详细查看书中代码
        }catch(IOException ex){
             
         }   
    }       
}  

为什么要贴出这段代码呢,首先这个是对于io模型的理解,其次这也是对IO模型的实践。另外这个也是对于netty 中的一个小小的入门。当然其中并没有涉及到netty API中的内容。那么netty 本身又是哪样的呢?它是如何实现这样的呢?

 

netty 中几个重要的concept

  Bootstrap  ServerBootstrap

       ChannelHandler   PipeChannelHandler  ChannelInitializer

       EventLoop   EventLoopGroup

     ChannelFuture

      ---to be  continue

    

    

 

posted @ 2020-08-07 18:55  serviceOBJ  阅读(147)  评论(0)    收藏  举报