Cindy 3.0a3 released

来源:互联网 发布:miss淘宝外设店 编辑:程序博客网 时间:2024/04/28 12:27

 

下载地址: 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前发送closemessage,但这就缺乏扩展性。目前权衡下来暂时采用Filter的设计,如果应用真的在意这个closemessage,那么可以通过组合SSLFilter和SocketSession实现来加以解决。