Mina 環境搭建

 

Mina 環境搭建

分類: java 服務器(Mina)

最近在學習服務器,而對JAVA又比較熟悉的我就開始了學習服務器了。可能很多人會說還是用c++吧,不錯現在很多大型遊戲公司都是用C++的。這裏我不得不說我的C++ 真的很一般了。所以這裏先學java吧,其實語言也在學習的時候沒必要太糾結了!廢話太多了,開始入正題了。

本節目錄

1 :有用網站

2 :準備資源

3 :環境搭建

4 :Demo測試

首先說一下爲什麼我這裏要選擇Mina ,1:Mina是開源的(我一般都會選擇開源的框架的)

                                                                      2:Apache 用了很多他的框架,一般來說還是很穩定的。 所以我選擇了Mina 。橫向比較現在用的比較多的還有netty ,XSocket 等等。

 

Mina 的作用: 它是封裝了JavaNIO(如果對JavaNIO不瞭解的可以再網上找一些資料來看一下,如果這個都沒弄明白的話後面就很難繼續了,所以建議先打好基礎)

 的一個開源框架,更利於我們開發java 服務器。

1 :有用網站

       . 官方網站http://mina.apache.org/

2 :準備資源

       . 搭建Mina 環境必備的資源有 : mina-core-2.0.7.jar , slf4j-api.jar , log4j.jar , slf4j-simple.jar (分別去官網下載吧,版本號這裏可能不同以最新的爲準,如果實在不知道下載的可以私聊我給你)

3 :環境搭建

        . java 環境

            學習java 的都應該清楚的,JDK 下載  ;  環境變量配置 ;  Eclipse 下載

        . Mina 環境

            以外部包的方式導入上面準備的4個資源(右鍵項目:build path  / configuare build path / add external jars  )     導入後如下結構圖,表明我們的環境搭建好了。

           - Referenced Libraries

               -mina-core-2.0.7.jar 

              - slf4j-api.jar 

              - log4j.jar 

              - slf4j-simple.jar

     

4 :Demo測試

        Server 端

          .  創建Server

            

  1. public class MinaServer   
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         //創建ServerScoket  
  6.         SocketAcceptor acceptor = new NioSocketAcceptor();  
  7.         //設置傳輸方式(這裏設置成對象傳輸模式,還有很多的類型後面會具體講到  
  8.         DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();  
  9.         ProtocolCodecFilter filter = new ProtocolCodecFilter(  
  10.                 new ObjectSerializationCodecFactory());  
  11.         chain.addLast("objectFilter", filter);  
  12.         // 添加消息處理  
  13.   
  14.         acceptor.setHandler(new MinaServerHanlder());  
  15.         // 開啓服務器   
  16.         int bindPort = 9988;  
  17.         try {  
  18.                       acceptor.bind(new InetSocketAddress(bindPort));  
  19.         } catch (IOException e) {  
  20.                             e.printStackTrace();  
  21.                   }  
  22.     }  
  23.   
  24. }  

          .  創建消息處理類  

  1. <p>import org.apache.mina.core.service.IoHandlerAdapter;  
  2. import org.apache.mina.core.session.IdleStatus;  
  3. import org.apache.mina.core.session.IoSession;</p><p>public class MinaServerHanlder extends IoHandlerAdapter {  
  4.  private int count = 0;</p><p> // 由底層決定是否創建一個session  
  5.  public void sessionCreated(IoSession session) {  
  6.   System.out.println("新客戶連接");  
  7.  }</p><p> // 創建了session 後會回調sessionOpened  
  8.  public void sessionOpened(IoSession session) throws Exception {  
  9.   count++;  
  10.   System.out.println("第 " + count + " 個 client 登陸!address: : "  
  11.     + session.getRemoteAddress());  
  12.  }</p><p> // 當收到了客戶端發送的消息後會回調這個函數  
  13.  public void messageReceived(IoSession session, Object message)  
  14.    throws Exception {  
  15.         System.out.println("服務器收到客戶端發送指令 :" + message);</p><p> }</p><p> // 發送成功後會回調的方法  
  16.  public void messageSent(IoSession session, Object message) {  
  17.   System.out.println("message send to client");  
  18.  }</p><p> // session 關閉調用  
  19.  public void sessionClosed(IoSession session) {  
  20.   System.out.println("one client disconnect");  
  21.  }</p><p> // session 空閒的時候調用  
  22.  public void sessionIdle(IoSession session, IdleStatus status) {  
  23.   System.out.println("connect idle");  
  24.  }</p><p> // 異常捕捉  
  25.  public void exceptionCaught(IoSession session, Throwable cause) {  
  26.   System.out.println("throws exception");  
  27.  }  
  28. }</p>  
  29.     

      Client 端

       Client 端的創建方式和服務器類似的

          創建客戶端

      

  1. import java.net.InetSocketAddress;  
  2.   
  3. import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;  
  4. import org.apache.mina.core.future.ConnectFuture;  
  5. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  6. import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;  
  7. import org.apache.mina.transport.socket.nio.NioSocketConnector;  
  8.   
  9.   
  10. public class MinaClient {  
  11.   
  12.     public static void main(String[] args) {  
  13.         // TODO Auto-generated method stub  
  14.             // 創建Socket  
  15.              NioSocketConnector connector = new NioSocketConnector();  
  16.              //設置傳輸方式  
  17.              DefaultIoFilterChainBuilder chain = connector.getFilterChain();  
  18.              ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory());  
  19.              chain.addLast("objectFilter", filter);  
  20.              //設置消息處理  
  21.              connector.setHandler(new MinaClientHanlder());  
  22.              //超時設置  
  23.              connector.setConnectTimeoutCheckInterval(30);  
  24.              //連接  
  25.              ConnectFuture cf = connector.connect(new InetSocketAddress("localhost"9988));  
  26.              cf.awaitUninterruptibly();  
  27.              cf.getSession().getCloseFuture().awaitUninterruptibly();  
  28.              connector.dispose();  
  29.                
  30.     }  
  31.   
  32. }  

 

          創建客戶端消息處理

  1. <p>import org.apache.mina.core.service.IoHandlerAdapter;  
  2. import org.apache.mina.core.session.IoSession;</p><p>  
  3. public class MinaClientHanlder extends IoHandlerAdapter {  
  4.  public void sessionOpened(IoSession session) throws Exception {  
  5.      System.out.println("客戶端登陸");  
  6.      session.write("hello world");  
  7.  }  
  8.       
  9.  public void sessionClosed(IoSession session)  
  10.  {  
  11.    System.out.println("client close");  
  12.  }  
  13.    
  14.  public void messageReceived(IoSession session , Object message)throws Exception  
  15.  {  
  16.   System.out.println("客戶端接受到了消息") ;  
  17.     
  18.  }  
  19. }</p><strong>運行結果</strong>  

server : 
新客戶連接
第 1 個 client 登陸!address: : /127.0.0.1:55497
服務器收到客戶端發送指令 :hello world

client :

客戶端登陸

後記 :本來想上傳圖片的,可惜CSDN 這個上傳圖片那叫一個慢啊。無奈了....如果有什麼問題可以回覆我。


原文:http://blog.csdn.net/pdw_jsp/article/details/8603224

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章