第一部分–第一章:
使用Selector 的非阻塞I/O
总体来看,与阻塞I/O 模型相比,这种模型提供了更好的资源管理:
a、使用较少的线程便可以处理许多连接,因此也减少了内存管理和上下文切换所带来开销;
b、当没有I/O 操作需要处理的时候,线程也可以被用于其他任务。尽管已经有许多直接使用Java NIO API 的应用程序被构建了,但是要做到如此正确和安全并不容易。特别是,在高负载下可靠和高效地处理和调度I/O 操作是一项繁琐而且容易出错的任务,最好留给高性能的网络编程专家——Netty。
异步和可伸缩性之间的联系又是什么呢?
1.非阻塞网络调用使得我们可以不必等待一个操作的完成。完全异步的I/O 正是基于这个特性构建的,并且更进一步:异步方法会立即返回,并且在它完成时,会直接或者在稍后的某个时间点通知用户。
2.选择器使得我们能够通过较少的线程便可监视许多连接上的事件。
Netty 的核心组件:
1.Channel;
Channel 是Java NIO 的一个基本构造。
它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或者多个不同的I/O操作的程序组件)的开放连接,如读操作和写操作。
目前,可以把Channel 看作是传入(入站)或者传出(出站)数据的载体。因此,它可以被打开或者被关闭,连接或者断开连接。
2.回调;
一个回调其实就是一个方法,一个指向已经被提供给另外一个方法的方法的引用。这使得后者可以在适当的时候调用前者。回调在广泛的编程场景中都有应用,而且也是在操作完成后通知相关方最常见的方式之一。
Netty 在内部使用了回调来处理事件;当一个回调被触发时,相关的事件可以被一个interfaceChannelHandler 的实现处理。当一个新的连接已经被建立时,ChannelHandler 的channelActive()回调方法将会被调用,并将打印出一条信息。
3.Future;
4.事件和ChannelHandler。