XNIO 是JBoss的一个IO框架。最开始我想找个lightweight servlet container库,于是看到了 undertow ,发现其网络部分使用的就是XNIO。所以干脆就先把XNIO的源码读下。
XNIO文档非常匮乏,能找到都是 3.0的版本 ,而且描述也不完全。Git上已经出到3.5.0。我读的是3.3.6.Final。
使用方式
可以参考 SimpleEchoServer.java ,不过这个例子使用的API已经被deprecated,仅供参考。使用方式大致为:
创建服务,提供acceptListener
在acceptListener中accept新的连接,并注册连接listener
在连接listener回调中完成IO读写
主要概念
Channel,基本上同Java NIO中的Channel一致,一个server socket是一个channel,accept出来的连接也是channel
ChannelListener,监听Channel上的IO事件,应用代码与XNIO交互的地方
XnioWorker,维护IO线程池及应用任务线程池
项目结构
源码分为两个项目: xnio-api及nio-impl。xnio-api属于API层;nio-impl是基于NIO的实现。通过Java service provider动态地找到nio-impl这个实现。可见XNIO还可以用其他方式来实现。
org.xnio.channels 这个包里包含了大量的Channel接口定义,这个是非常恶心的一个地方,读代码的时候很容易被绕进去。这个包主要的实现后面提。 org.xnio.conduits ,我理