背景
学习Netty之前,学习Doug Lea的nio知识。Doug Lea是包 java.nio 的作者。
Classic Service Designs(古典的网络编程服务设计)
- Web services, Distributed Objects, etc. Most have same basic structure: Read request;Decode request;Process service; Encode reply ;Send reply . But differ in nature and cost of each step XML parsing, File transfer, Web page generation, computational services.
2. 典型的模式:一请求一线程一应答。服务对客户端发来的每个请求都会创建一个线程。
3. 实现伪代码
4. 需要实现的一些目标
a) 如果客户端非常多的情况下,只能持续添加硬件(CPU,memory,disk,bandwidth)来满足。
b) 如何满足低延迟,大量请求?
5. 方法
a)分而治之设计。把单线程处理的所有事情分拆分成一个个小任务去执行,并且每个小任务都是由线程池去处理的。
b)事件驱动设计 。把执行过程设计成异步的。注册事件,事件发生,监听事件发生。
c) Reactor设计。Reactor responds to IO events by dispatching the appropriate handle. Handlers perform non-blocking actions. Manage by binding handlers to event.
小结
- 学习古典的网络编程服务设计方式,并理解它的缺陷。一请求一线程一应答,非常消耗资源。
- 梳理网络编程需要实现的目标,在有限的资源条件下,支撑更多的客户端发来大量的请求。
- 采用分而治之的思想和事件驱动模式及其Reactor论文中提到的Reactor模式,进行编程。