`

Yet another nio framework for java

    博客分类:
  • java
阅读更多

项目名称:Yanf4j(Yet another nio framework for java)
项目地址:http://code.google.com/p/yanf4j/ ,当前版本0.30-beta1
协议:Apache License, Version 2.0
简单描述:
    有这么多nio框架了,为什么要another?重复造轮子也罢,这框架脱胎于一个服务器项目的网络层代码,期间参考了cindy、grizzly等nio框架的实现,加上自己的一些心得体会实现的。特点是简单、小巧、超轻量级。项目没有多大野心,目标是高效、简单地实现非阻塞模式的Server(TCP、UDP)并且保证不错的性能要求,不提供客户端API 和阻塞模式。如果你的项目需要实现一个socket server并且不希望用太重量级的框架,yanf4j是个不错的选择。

    例子,在source archive中带有例子,这里描述下tcp和udp的echo server的实现。
 一、先看TCP的Echo Server
1、实现处理handler,继承HandlerAdapter类,实现相应的回调方法,这与其他nio框架没啥区别:

<!---->import  com.google.code.yanf4j.nio.Dispatcher;
import  com.google.code.yanf4j.nio.Session;
import  com.google.code.yanf4j.nio.impl.HandlerAdapter;
import  com.google.code.yanf4j.nio.util.DispatcherFactory;

public   class  EchoHandler  extends  HandlerAdapter < String >  {

    Dispatcher dispatcher 
=  DispatcherFactory.newDispatcher( 4 );

    @Override
    
public   void  onException(Session session, Throwable t) {
        t.printStackTrace();
    }

    @Override
    
public   void  onMessageSent(Session session, String t) {
         System.out.println( " sent  "   +  t  +   "  to  "
                    
+  session.getRemoteSocketAddress());
    }

    @Override
    
public   void  onSessionStarted(Session session) {
        System.out.println( " session started " );
        session.setUseBlockingRead(
true );
        session.setUseBlockingWrite(
false );
    }

    
public   void  onSessionCreated(Session session) {
         System.out.println(session.getRemoteSocketAddress().toString()
                    
+   "  connected " );
    }

    
public   void  onSessionClosed(Session session) {
         System.out.println(session.getRemoteSocketAddress().toString()
                    
+   "  disconnected " );

    }

    
public   void  onReceive( final  Session session,  final  String msg) {
         System.out.println( " recv: "   +  msg);
        
if  (msg  !=   null )
            dispatcher.dispatch(
new  Runnable() {
                
public   void  run() {

                    
if  (msg.equals( " q " ))
                        session.close();
                    session.send(msg);
                }
            });
    }

}



2、实现EchoServer,核心是TCPController类的使用:

<!---->        Configuration configuration  =   new  Configuration();
        configuration.setStatisticsServer(
true );
        configuration.setTcpSessionReadBufferSize(
256   *   1024 );  //  设置读的缓冲区大小
        AbstractController controller  =   new  TCPController(configuration,
                
new  StringCodecFactory());
        controller.setPort(
8080 );  //  设置端口
        controller.setReadThreadCount( 1 );  //  设置读线程数,通常为1
        controller.setReceiveBufferSize( 16   *   1024 );  //  设置socket接收缓冲区大小
        controller.setReuseAddress( false );  //  设置是否重用端口
        controller.setHandler( new  EchoHandler());  //  设置handler
        controller.setHandleReadWriteConcurrently( true );  //  设置是否允许读写并发处理
        controller.addStateListener( new  ServerStateListener());
        controller.start();


Configuration 默认会在classpath查找yanf4j.properties属性文件,用于配置服务器属性,然而,你也看到,可以编码设置这些属性,具体参考wiki。

3、然后?没然后了,一个TCP的echo server已经搞定了,你可以telnet到8080端口试试了。

二、UDP的Echo server
1、handler,可以复用前面的EchoHandler
2、UDP的核心类是UDPController:

<!---->        Configuration configuration  =   new  Configuration();
        configuration.setTcpPort(
8090 );
        configuration.setTcpReuseAddress(
false );
        configuration.setStatisticsServer(
true );
        configuration.setTcpNoDelay(
true );
        configuration.setTcpReadThreadCount(
1 );
        configuration.setTcpRecvBufferSize(
16   *   1024 );
        UDPController controller 
=   new  UDPController(configuration);
        controller.setMaxDatagramPacketLength(
1024 );
        controller.setHandler(
new  EchoHandler());
        controller.start();


  更多细节,请参考项目主页上的wiki。

分享到:
评论
1 楼 rain2005 2009-08-25  
这么好的东东啊,正在学习中,以后碰到问题还请帮忙解答下啊。

相关推荐

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    淘宝gecko框架设计.pdf

    Gecko基于yanf4j(Yet another nio framework for java)构建,这是一个Reactor+Handler模式的NIO框架。框架的主要组件包括: - **Controller**:控制接口,负责启动、管理、停止框架,并与业务代码交互。 - **...

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    NioServer.java

    NioServer.java

    java NIO.zip

    java NIO.zip

    java NIO 中文版

    讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    Java NIO英文高清原版

    Java NIO英文高清原版

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    JavaNIO.zip_java nio_nio java

    java nio使用示例,介绍了java nio的常用类及使用方法

    java基于NIO实现Reactor模型源码.zip

    java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...

    Java Nio selector例程

    java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...

    JavaNIO服务器实例Java开发Java经验技巧共6页

    JavaNIO服务器实例Java开发Java经验技巧共6页.pdf.zip

    nio.rar_NIO_java nio_java_nio_mina java n

    nio教程,好的入门教材 ,

    java nio.pdf

    java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...

    Using NIO to copy Java file fast.zip_java nio

    Using NIO to copy Java file fast

    java NIO技巧及原理

    java NIO技巧及原理解析,java IO原理,NIO框架分析,性能比较

    java nio中文版

    java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...

    java NIO实例

    实例介绍了一个简单的nio实例,适合刚接触nio的童鞋们....

    java nio proraming pdf

    java.nio (NIO stands for non-blocking I/O) is a collection of Java programming language APIs that offer features for intensive I/O operations. It was introduced with the J2SE 1.4 release of Java by ...

Global site tag (gtag.js) - Google Analytics