Apache Mina開發手冊
一、介紹
Apache Mina是一個網絡應用框架,簡化用戶開發高性能、高可擴展性的網絡應用程序的難度。Mina提供了一個抽象的事件驅動的異步API,通過Java NIO實現各種傳輸協議如TCP/IP和UDP/IP。
Apache Mina經常用作:
1)NIO框架庫
2)客戶端/服務器通信框架庫
3)網絡Socket通信庫
Apache Mina還伴隨有不少子項目:
1)Asyncweb
構建于Apache Mina異步框架之上的HTTP服務器
2)FtpServer
一個FTP服務器
3)SSHd
一個Java庫,支持SSHH協議
4)Vysper
一個XMPP服務器
二、Apache Mina下載
下載最新的Mina v2.0.8版
地址見:http://mina.apache.org/mina-project/downloads.html
三、用Mina開發時間服務器
說明一下,其實是基于官方的例子,略作了修改,因為發現官方的例子太陳舊,甚至包含了deprecated的方法。
1、先決條件
Apache Mina 2.0.8 Core
JDK 7
SLF4J+LOGBACK
2、項目依賴包
mina-core-2.0.8.jar
slf4j-api-1.6.6.jar
3、編寫基于Mina的Time服務器
package ch.chiqms.server; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; importorg.apache.mina.core.service.IoAcceptor; importorg.apache.mina.core.session.IdleStatus; importorg.apache.mina.filter.codec.ProtocolCodecFilter; importorg.apache.mina.filter.codec.textline.TextLineCodecFactory; importorg.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaTimeServer { privatestatic final int PORT = 9123; publicstatic void main(String[] args){ //監聽連接的對象 IoAcceptoracceptor = new NioSocketAcceptor(); //配置過濾器 //logger過濾器會輸出所有的信息,例如新創建的會話、消息的接收、消息的發送、會話的關閉 //codec過濾器會轉換二進制活協議規定的數據為消息對象,這里是處理基于文本的消息 acceptor.getFilterChain().addLast("logger",new LoggingFilter()); acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter( newTextLineCodecFactory(Charset.forName("UTF-8")))); // acceptor.setHandler(newTimeServerHandler()); //設置輸入緩沖區的大小和會話的IDLE熟悉 acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10); try{ acceptor.bind(newInetSocketAddress(PORT)); }catch (IOException e) { e.printStackTrace(); } } }
4、編寫Time服務的Handler
package ch.chiqms.server; import java.text.SimpleDateFormat; import java.util.Calendar; import org.apache.mina.core.service.IoHandlerAdapter; importorg.apache.mina.core.session.IdleStatus; importorg.apache.mina.core.session.IoSession; public class TimeServerHandler extendsIoHandlerAdapter { @Override publicvoid exceptionCaught(IoSession session, Throwable cause) throwsException { cause.printStackTrace(); } @Override publicvoid messageReceived(IoSession session, Object message) throws Exception { Stringstr = message.toString(); if(str.trim().equalsIgnoreCase("quit")){ session.close(true); return; } Calendartime = Calendar.getInstance(); SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); session.write(df.format(time.getTime())); System.out.println("TimeMessage written..."); } @Override publicvoid sessionIdle(IoSession session, IdleStatus status) throws Exception { System.out.println("IDLE"+session.getIdleCount(status)); } }
5、運行MinaTimeServer
在命令行輸入telnet 127.0.0.1 9123
服務器端的輸出也可以看到:
SLF4J: Failed to load class"org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP)logger implementation SLF4J: Seehttp://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Time Message written... Time Message written... Time Message written...
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!