<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    Yet another nio framework for java

    Posted on 2008-10-11 14:25 dennis 閱讀(2842) 評(píng)論(6)  編輯  收藏 所屬分類: javamy open-source
    項(xiàng)目名稱:Yanf4j(Yet another nio framework for java)
    項(xiàng)目地址:http://code.google.com/p/yanf4j/,當(dāng)前版本0.30-beta1
    協(xié)議:Apache License, Version 2.0
    簡(jiǎn)單描述:
        有這么多nio框架了,為什么要another?重復(fù)造輪子也罷,這框架脫胎于一個(gè)服務(wù)器項(xiàng)目的網(wǎng)絡(luò)層代碼,期間參考了cindy、grizzly等nio框架的實(shí)現(xiàn),加上自己的一些心得體會(huì)實(shí)現(xiàn)的。特點(diǎn)是簡(jiǎn)單、小巧、超輕量級(jí)。項(xiàng)目沒(méi)有多大野心,目標(biāo)是高效、簡(jiǎn)單地實(shí)現(xiàn)非阻塞模式的Server(TCP、UDP)并且保證不錯(cuò)的性能要求,不提供客戶端API 和阻塞模式。如果你的項(xiàng)目需要實(shí)現(xiàn)一個(gè)socket server并且不希望用太重量級(jí)的框架,yanf4j是個(gè)不錯(cuò)的選擇。

        例子,在source archive中帶有例子,這里描述下tcp和udp的echo server的實(shí)現(xiàn)。
     一、先看TCP的Echo Server
    1、實(shí)現(xiàn)處理handler,繼承HandlerAdapter類,實(shí)現(xiàn)相應(yīng)的回調(diào)方法,這與其他nio框架沒(méi)啥區(qū)別:
    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、實(shí)現(xiàn)EchoServer,核心是TCPController類的使用:

            Configuration configuration = new Configuration();
            configuration.setStatisticsServer(
    true);
            configuration.setTcpSessionReadBufferSize(
    256 * 1024); // 設(shè)置讀的緩沖區(qū)大小
            AbstractController controller = new TCPController(configuration,
                    
    new StringCodecFactory());
            controller.setPort(
    8080); // 設(shè)置端口
            controller.setReadThreadCount(1); // 設(shè)置讀線程數(shù),通常為1
            controller.setReceiveBufferSize(16 * 1024); // 設(shè)置socket接收緩沖區(qū)大小
            controller.setReuseAddress(false); // 設(shè)置是否重用端口
            controller.setHandler(new EchoHandler()); // 設(shè)置handler
            controller.setHandleReadWriteConcurrently(true); // 設(shè)置是否允許讀寫并發(fā)處理
            controller.addStateListener(new ServerStateListener());
            controller.start();

    Configuration 默認(rèn)會(huì)在classpath查找yanf4j.properties屬性文件,用于配置服務(wù)器屬性,然而,你也看到,可以編碼設(shè)置這些屬性,具體參考wiki。

    3、然后?沒(méi)然后了,一個(gè)TCP的echo server已經(jīng)搞定了,你可以telnet到8080端口試試了。

    二、UDP的Echo server
    1、handler,可以復(fù)用前面的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();

      更多細(xì)節(jié),請(qǐng)參考項(xiàng)目主頁(yè)上的wiki



    評(píng)論

    # re: Yet another nio framework for java  回復(fù)  更多評(píng)論   

    2008-10-15 09:48 by wavefly
    編程風(fēng)格和Mina有些類似:pre-event,看看你的源碼先……

    # re: Yet another nio framework for java  回復(fù)  更多評(píng)論   

    2008-10-15 10:17 by dennis
    @wavefly
    嗯,多多指教。整體架構(gòu)上并無(wú)多少新意,仍然是reactor+事件觸發(fā)機(jī)制,只是在cindy的基礎(chǔ)上揉和了grizzly的一些長(zhǎng)處。私下里說(shuō),其實(shí)就是俺想鍛煉學(xué)習(xí)nio罷了。

    # re: Yet another nio framework for java  回復(fù)  更多評(píng)論   

    2009-02-18 18:11 by 菜鳥問(wèn)道
    能否舉例說(shuō)明客戶端API調(diào)用?讓我學(xué)一下??

    # re: Yet another nio framework for java  回復(fù)  更多評(píng)論   

    2009-02-18 23:22 by dennis
    @菜鳥問(wèn)道
    本來(lái)沒(méi)有客戶端API的,yanf4j一開始定位在服務(wù)器框架上。不過(guò)我最近添加了客戶端API支持,請(qǐng)從svn獲取

    # re: Yet another nio framework for java  回復(fù)  更多評(píng)論   

    2009-02-20 00:59 by 菜鳥問(wèn)道
    請(qǐng)從svn獲取?
    多謝大俠回答,問(wèn)下SVN是什么意思?

    # re: Yet another nio framework for java  回復(fù)  更多評(píng)論   

    2010-03-22 12:23 by yonlist
    厲害,膜拜一下,學(xué)習(xí)一下
    主站蜘蛛池模板: 亚洲av永久综合在线观看尤物| 亚洲色无码一区二区三区| 亚洲av专区无码观看精品天堂| 99在线免费观看视频| 久久亚洲日韩精品一区二区三区 | 亚洲av高清在线观看一区二区 | 在线观看免费人成视频| 亚洲偷偷自拍高清| 麻豆国产人免费人成免费视频| 亚洲精华液一二三产区| 国产特级淫片免费看| 一级毛片在线免费播放| 亚洲国产精品无码久久一线| 亚洲视频在线观看免费| 亚洲国产美女在线观看 | A片在线免费观看| 亚洲综合视频在线观看| 成人毛片18岁女人毛片免费看| 亚洲Av永久无码精品黑人| 亚洲精品无码久久久| 无码精品一区二区三区免费视频| 亚洲精品视频免费看| 免费激情视频网站| 久久国产精品免费| 亚洲国产精品免费在线观看| 永久黄网站色视频免费直播| 亚洲免费在线观看| 亚洲黄色在线电影| 四虎永久在线精品免费观看地址| 在线看片免费人成视频久网下载 | 又爽又黄无遮挡高清免费视频| 成全在线观看免费观看大全| 亚洲人成黄网在线观看| 亚洲不卡AV影片在线播放| 91视频免费观看| 自拍偷区亚洲国内自拍| 亚洲综合色区在线观看| aⅴ在线免费观看| 夜夜爽妓女8888视频免费观看| 亚洲精品电影天堂网| 亚洲精品无码久久久|