1.Netty产生背景
说到Netty不得不提I/O,因为Netty本身是一个高性能的网络I/O框架,使得程序员可以低门槛快速地进行网络编程。
1.1 I/O模型
I/O模型,I/O是输入输出,网络发送和接收数据也是一种输入输出。最初jdk提供的I/O是阻塞型I/O,叫BIO,Blocking I/O,效率低。后来,开发出类NIO,非阻塞型I/O,但不是真正的异步I/O,本质是多路复用I/O。类似通信的频分复用或时分复用,提高了通信的吞吐量。
1.2 没有Netty框架,如何进行网络编程
- 用JDK提供传统的BIO库
利用jdk提供的ServerSocket 和Socket, 主线程(即Acceptor线程)启动ServerSocket监听客户端网络连接,每来一个客户端,新建一个连接Socket,同时创建一个线程(即I/O线程)进行处理。
由于每来一个连接创建一个I/O线程,连接关闭后,I/O线程结束。这样导致系统频繁创建线程,创建线程成本高。因此出现了I/O线程池,解决了I/O线程频繁创建成本高的问题,进一步提高效率。但是还是BIO模型。 - 用JDK提供的NIO库
BIO效率低,于是出现类NIO,java在jdk 1.4才引入了NIO。NIO中重要的概念有缓冲区Buffer、通道Channel、多路复用器Selector,BIO中的ServerSocket和Socket,在NIO分别是ServerSocketChannel和SocketChannel。
NIO编程相对与BIO,就比比较复杂了:
1)创建Selector多路复用器
2)创建ServerSocketChannel,绑定监听端口,注册到Selector多路复用器
3)循环监听多路复用器,有新的请求链接,创建SocketChannel,把新的SocketChannel注册到多路复用器;有可读的数据,对数据进行读写操作。
1.3 用Netty进行网络编程
Netty其实是封装类java的NIO又有一些改进,本身不是创建新的I/O编程库,而是封装已有的jdk NIO库,使得开发人员更加简单、快速、便捷实用。因为使用原生jdk NIO需要开发者非常熟悉网络编程,才能写出高质量的NIO程序。我们平时项目做的开发一般是业务开发,为什么不站在巨人肩膀上,直接使用已有框架呢。
Netty编程:
1)创建NioEventLoopGroup线程组,启动ServerBootStrap
2)设置childHandler,对Channel进行初始化操作
3)初始化Channel一般是给Channel的pipeline添加ChannelHandler进行业务处理
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。