工作原理
Netkit
是基于Reactor模式设计,即服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor模式也叫Dispatcher模式,即I/O多路复用统一监听事件,收到事件后分发(Dispatch给某进程),这是编写高性能网络服务器最重要的技术之一。
核心类介绍
-
ServerAcceptor
: 服务端网络IO请求响应类,在程序启动时绑定对应的IP和端口,程序启动后接收对端网络发送的请求并将该网络请求分发到EventLoopGroup
进行IO数据处理。 -
EventLoopGroup
: IO数据轮询组,管理所有的EventLoop
,其底层为一组线程池,当ServerAcceptor
接收并建立对端请求后会通过此类将对端IO每个事件均衡分发到指定的EventLoop
中,通过Selector.wakeup唤醒对应的Selector
选择器。 -
EventLoop
: Reactor 线程模型的事件处理引擎,每个 EventLoop 线程都维护一个 Selector 选择器,它主要负责处理包括读、写、IO异常等各种 I/O 事件。 -
IoFilter
: IO数据过滤器,负责对各种IO数据进行数据筛选和过滤,包括异常IO数据解析、各种网络协议数据解析,底层协议解析支持Http协议、Socks协议、Whois协议、DNS协议、SMTP协议以及各种自定义网络协议。 -
IoProcessor
: IO数据处理器,在EventLoop
对各种网络数据处理和解析过滤后交由此类进行最终数据处理,其内部都维护一个Channel便于将自身注册到Selector来实现所有IO数据的异步处理。 -
IoListener
: IO数据处理监听器,由业务自定义监听逻辑,根据不同的监听事件进行处理,包括数据接收时的监听,数据连接时的监听,数据读写的监听以及网络关闭、网络异常时的监听。 -
IoHandler
: IO数据处理器,真正交由业务自己实现的IO数据处理器,针对服务端为ServerHandler
,针对客户端为ClientHandler