本章包括以下内容:
netty架构
为什么需要非阻塞io
阻塞和非阻塞io对比
了解java nio实现存在的一些问题和netty的解决方案
本章介绍netty,但主要是java nio(java非阻塞io)的API的内容。如果你是第一次接触JVM的网络编程,那么本章就是一个很好的开端,应验丰富的java程序员也可以阅读本章来复习。如果你很熟悉NIO和NIO.2,那么你可以直接跳到第二章开始阅读,第二章教你在你的机器上运行netty程序并深入学习netty。
netty是一个可以是程序员可以快速开发网络应用的NIO客户端-服务器框架,如通过特定的协议来通信的客户端和服务器。netty向你提供了一个简单且灵活的方法来开发网络应用。netty把复杂的网络通信抽象出了便于使用的API,将底层的网络通信和业务逻辑的代码解耦。因为netty是基于nio的,所以netty的API是异步的。
通常来说不管使用netty还是NIO API来编写网络应用都有可扩展性方面的问题。netty的一个关键组成部分就是它的异步特性,本章会讨论同步阻塞和异步非阻塞来阐明为什么要使用异步,以及异步是怎么解决扩展性问题的。
对于网络编程的新手来说本章会让你对网络应用有一个大体上的理解,以及netty是怎么实现它的。本章还介绍了怎么使用基础的java网络API,讨论了java网络API的缺点和优点,展示了netty是怎么定位java的问题(如EPOLL的BUG和内存泄漏)的。
在本章的最后,你会理解netty是什么以及它能帮你做什么,同样也会理解java nio以及对异步的处理方法,帮你理解本书的其他章节打下基础。
1.1 为什么选择netty?
David Wheeler 说:“所有的计算机问题都可以通过添加一个间接层来解决”。对于nio的客户端服务器框架来说,netty就是这么一个间接层。netty简化了编写tcp,udp的网络服务器的编写,但是你同样可以使用底层的API,因为netty提供了高层的抽象。