netty 入门
guthub: netty 入门
使用Java NIO就可以进行高性能网络编程,但是利用jdk原生的NIO API的话,在编程的时候必须很小心,需要自己来规避一些可能的异常情况,如:epoll bug问题就是其中之一,理论上想Selector注册的所有Channel都没有IO操作的话,Selector.select()将会被阻塞,直至有Channel有IO操作,但是epoll bug可能会使得即使没有Channel进行IO操作的时候,执行select()被阻塞的线程也会被唤醒,从而使得CPU空转,造成资源浪费; 另外利用原生NIO编程的话,代码复杂繁重,导致编写的代码非常不简洁,代码多了不可避免的增大了引入新bug的可能性。
在这种情况下,大神们设计了netty框架,它基于Java NIO,但是对Java 原生的nio进行了封装,并且想人所想,对一些易引入bug的地方提前做了规避;简化了网络编程,降低其复杂程度;代码少了,引入bug的可能性也就少了。总的来说,netty框架就是在网络编程的时候,替我们把一些脏活累活给承包了,然后使得程序员们可以以一种很舒服的方式来进行网络编程。当然了,即使不适用netty框架,仅仅使用Java NIO也是可以编写一个优秀的高性能的网络程序,但是对于我这种没有丰富NIO编程经验的新手而言,还是喜欢站在巨人的肩膀上往前走。
1 编写Server程序
1.声明两个线程池:group,worker,group负责接收客户端的连接,worker负责处理客户端过来的请求
EventLoopGroup group = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();
2.创建一个启动类对象
ServerBootstrap serverBootstrap = new ServerBootstrap();
3.借助ServerBootstrap为服务端程序添加相关配置
//绑定线程池
serverBootstrap.group(group,worker)
//绑定服务端的Channel
.channel(NioServerSocketChannel.claa)
//绑定本地端口8888
.localAddress(new InetSoc