第 1 章 笔记
Java 网络编程
早期Java的网络编程,需要学习很多C语言套接字(Socket)的知识,但是在创建一个C/S(客户端/服务器)应用的时候有大量重复性的工作。早期Java API仅支持本地系统套接字库提供的阻塞函数,需要为每一个客户端Socket创建一个新的线程管理,这样在用户量超过10000的时候,就难以为继了。
JDK1.4以后引入了NIO包,即非阻塞IO。NIO利用选择器(Selector)实现了一个线程可以管理多个Socket,这种模型更好地进行了资源管理:
- 减少了线程使用的数量,因而减少了内存管理和上下文切换所带来的开销;
- 将线程从IO阻塞的过程中释放出来,使得在没有IO处理的时候,线程可以处理其他任务。
有关于Java NIO的详细讲解可以看这儿
Netty简介
Netty是Java在网络编程领域一种卓越的框架,在设计、易用性、性能、健壮性、安全性和社区驱动等方面具有诸多优势,其特点可以概括为:
- 异步性
- 事件驱动
Netty使用非阻塞IO来处理大量事件,为这些事件提供通知,并使得它们可以被处理。
Netty核心组件
主要分为:
- Channel
- 回调
- Future
- 事件和ChannelHandler
Channel
表示通道,即传入或传出数据的载体,可以被打开或者关闭,连接或断开连接。
回调
要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数。
Future
提供一种在操作完成的时候通知应用程序的方式,可以被看作一个异步操作的结果占位符,表示将在未来某个时刻完成,并提供对其结果的访问。
事件和ChannelHandler
如下图,每个事件都可以被分发给ChannelHandler类的某个用户实现的方法,将事件驱动范式直接转换为应用程序构件块。
网友评论