DANCE WITH JAVA

          開(kāi)發(fā)出高質(zhì)量的系統(tǒng)

          導(dǎo)航

          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          隨筆分類(lèi)(277)

          隨筆檔案(238)

          閱讀排行榜

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          好友之家

          最新評(píng)論

          apache mina (異步連接框架)介紹

          一、介紹
          mina(Multipurpose Infrastructure for Network Applications) 是apache的頂級(jí)項(xiàng)目之一,用于構(gòu)造異步連接的各種網(wǎng)絡(luò)應(yīng)用
          二、最簡(jiǎn)單的使用實(shí)例
          package aicu.mina;
          import java.io.IOException;
          import java.net.InetSocketAddress;
          import java.nio.charset.Charset;

          import org.apache.mina.common.ByteBuffer;
          import org.apache.mina.common.IoAcceptor;
          import org.apache.mina.common.SimpleByteBufferAllocator;
          import org.apache.mina.filter.LoggingFilter;
          import org.apache.mina.filter.codec.ProtocolCodecFilter;
          import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
          import org.apache.mina.transport.socket.nio.SocketAcceptor;
          import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;

          public class MinaTimeServer {

              
          private static final int PORT = 9123;

              
          public static void main(String[] args) throws IOException {
                  
          //設(shè)置buffer
                  ByteBuffer.setUseDirectBuffers(false);
                  ByteBuffer.setAllocator(
          new SimpleByteBufferAllocator());
                  
          //定義acceptor
                  IoAcceptor acceptor = new SocketAcceptor();
                  
          //定義config
                  SocketAcceptorConfig cfg = new SocketAcceptorConfig();
                  
          //設(shè)置config,加入filter
                  cfg.getSessionConfig().setReuseAddress( true );
                  cfg.getFilterChain().addLast( 
          "logger"new LoggingFilter() );
                  cfg.getFilterChain().addLast( 
          "codec"new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
                  
          //加入port handler cfg
                  acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler(), cfg);
                  System.out.println(
          "MINA Time server started.");
              }

          }

          對(duì)應(yīng)的handler ,handler的作用是在對(duì)應(yīng)的網(wǎng)事件的處理代碼
          package aicu.mina;
          import java.util.Date;

          import org.apache.mina.common.IdleStatus;
          import org.apache.mina.common.IoHandlerAdapter;
          import org.apache.mina.common.IoSession;
          import org.apache.mina.common.TransportType;
          import org.apache.mina.transport.socket.nio.SocketSessionConfig;

          public class TimeServerHandler extends IoHandlerAdapter {
              
          public void exceptionCaught(IoSession session, Throwable t) throws Exception {
                  t.printStackTrace();
                  session.close();
              }


              
          public void messageReceived(IoSession session, Object msg) throws Exception {
                  String str 
          = msg.toString();
                  
          //如果是quit就關(guān)閉session退出
                  if( str.trim().equalsIgnoreCase("quit") ) {
                      session.close();
                      
          return;
                  }

                  
          //否則打印當(dāng)前日期
                  Date date = new Date();
                  session.write( date.toString() );
                  System.out.println(
          "Message written");
              }


              
          public void sessionCreated(IoSession session) throws Exception {
                  System.out.println(
          "Session created");

                  
          if( session.getTransportType() == TransportType.SOCKET )
                      ((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 
          2048 );

                  session.setIdleTime( IdleStatus.BOTH_IDLE, 
          10 );
              }

          }
          三、使用方法:
          編譯上邊兩個(gè)類(lèi)(需要加入mina的jar文件),然后運(yùn)行terminalServer
          開(kāi)始->運(yùn)行->cmd進(jìn)入控制臺(tái)
          telnet 127.0.0.1 9123
          輸入hello
          得到當(dāng)前日期
          輸入quit關(guān)閉session。

          posted on 2007-07-09 11:26 dreamstone 閱讀(6413) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): 利器其它開(kāi)源框架

          評(píng)論

          # re: apache mina (異步連接框架)介紹 2007-07-09 12:54 BeanSoft

          NIO, 好啊, 支持!  回復(fù)  更多評(píng)論   

          # re: apache mina (異步連接框架)介紹 2007-07-09 13:15 永恒

          介紹的簡(jiǎn)單了點(diǎn),能不能給個(gè)詳細(xì)的介紹呢,呵呵  回復(fù)  更多評(píng)論   

          # re: apache mina (異步連接框架)介紹 2007-07-09 14:09 flybean

          Apache MINA (Multipurpose Infrastructure for Network Applications) is a network application framework which helps users develop high performance and high scalability network applications easily.

          哪里看出來(lái)是異步?  回復(fù)  更多評(píng)論   

          # re: apache mina (異步連接框架)介紹 2007-07-09 15:01 BeanSoft

          啊, 不會(huì)吧, 自從 JDK 1.4 后, Tomcat 就用 NIO 改寫(xiě)了, 其它很多廠商也是, 畢竟 NIO 效率要高很多.  回復(fù)  更多評(píng)論   

          # re: apache mina (異步連接框架)介紹 2007-07-09 16:49 dreamstone

          @flybean
          我也是剛開(kāi)始接觸,所說(shuō)的異步是只mina內(nèi)部,使用它封裝的各種類(lèi),就實(shí)現(xiàn)了異步。我理解這個(gè)框架的作用就是不用自己再去實(shí)現(xiàn)異步。利用mina的類(lèi)來(lái)編寫(xiě)程序,在mina內(nèi)部實(shí)現(xiàn)了異步。這也是它的作用。  回復(fù)  更多評(píng)論   

          # re: apache mina (異步連接框架)介紹 2009-10-18 17:03 tablechair

          如果我要同步的,mina實(shí)現(xiàn)不了?  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 龙州县| 南郑县| 蓬安县| 苏尼特右旗| 固始县| 乐清市| 松潘县| 额济纳旗| 灵丘县| 潮安县| 双江| 虹口区| 札达县| 华阴市| 加查县| 阿合奇县| 缙云县| 始兴县| 南雄市| 宜章县| 曲水县| 堆龙德庆县| 汾阳市| 壶关县| 廉江市| 龙海市| 兴宁市| 高碑店市| 中超| 万全县| 南昌县| 东辽县| 玉田县| 高阳县| 红原县| 偏关县| 湘乡市| 古交市| 马鞍山市| 西安市| 林西县|