下载地址: http://sourceforge.net/projects/cindy
修改记录:
- 添加了SSLFilter,不过仅能运行在Java 5.0以及以后的版本上
- 添加了net.sf.cindy.session.dispatcher包,应用可以加入自定义的Dispatcher实现(通过-Dnet.sf.cindy.dispatcher=Dispatcher实现类 来指定)
- 按照相反的顺序分发xxxSend/xxxSent事件,即排在前面的Filter后处理该事件
- 在Buffer接口中添加了release/isReleased/isPermanent/setPermanent方法
- 移除了BufferFactory的release方法
- 在BufferFactory类中加入了wrap(Buffer[])方法
- 在BufferBuilder类中加入了release方法
- 移除了SessionHandler接口中的packetReceived/packetSent事件
- 在SerialEncoder类中,用writeUnshared方法代替write方法
- 在SerialDecoder类中,检测流的头部,是否为序列化流
- 提高了LinkedBuffer效率(仍处于试验性质)
- 提高了DefaultBufferCache效率
- 在SocketSessionAcceptor接口中添加了backlog/reuseAddress/receiveBufferSize属性
- 一些小的改进和Bug修正
最大的改进就是加入了SSLFilter以及反向分发xxxSend/Sent事件。
SocketSessionAcceptor中所增加的属性也是在实现网络服务器时经常要用到的,至于SocketSession、 DatagramSession中经常要设置的属性由于数量太多,还是通过暴露出来的Socket和DatagramSocket来设置比较方便一点。
SSLFilter还有一个小缺陷,由于Session没有提供beforeClose的一个事件出来,因此在Session关闭前不能发送SSL的close message。这样服务器端可能会抛出一个异常:
javax.net.ssl.SSLException: Inbound closed before receiving peer's close_notify: possible truncation attack?
这种实现不是太完美,不过完美的实现只能通过继承已有的SocketSession实现来解决,在close前发送close message,但这就缺乏扩展性。目前权衡下来暂时采用Filter的设计,如果应用真的在意这个close message,那么可以通过组合SSLFilter和SocketSession实现来加以解决。