JAVA NIO異步通信框架MINA選型和使用的幾個細節(概述入門,UDP, 心跳)

     Apache MINA 2 是一個開發高性能和高可伸縮性網絡應用程序的網絡應用框架。它提供了一個抽象的事件驅動的異步 API,可以使用 TCP/IP、UDP/IP、串口和虛擬機內部的管道等傳輸方式。Apache MINA 2 可以作爲開發網絡應用程序的一個良好基礎。

    Apache MINA是非常著名的基於java nio的通信框架,以前都是自己直接使用udp編程,新項目選型中考慮到網絡通信可能會用到多種通信方式,因此使用了MINA。

     本文結構:

     (1)客戶端和服務器代碼;雖然是udp的,但是mina的優美的設計使得所有的通信方式能夠以統一的形式使用,perfect。當然注意的是,不同的通信方式,背後的機理和有效的變量、狀態是有區別的,所以要精通,那還是需要經驗積累和學習的。

     (2)超時和Session的幾個實際問題

     (3)心跳,糾正幾個錯誤

 

     既然是使用,廢話少說,直接整個可用的例子。當然了,這些代碼也不是直接可用的,我們應用的邏輯有點複雜,不會這麼簡單使用的。

請參考mina的example包和文檔http://mina.apache.org/udp-tutorial.html

 

版本2.0 RC1

1.1 服務器端

 

 

1.2 客戶端

 

2. 超時的幾個經驗總結:

    udp session默認是60秒鐘超時,此時狀態爲closing,數據就發不出去了。

Session的接口是IoSession,udp的最終實現是NioSession。如果交互在60秒內不能處理完成,就需要使用Keep-alive機制,即心跳機制。

 

3. 心跳機制

    在代碼中已經使用了心跳機制,是通過mina的filter實現的,mina自身帶的心跳機制好處在於,它附加了處理,讓心跳消息不會傳到業務層,在底層就完成了。

    在上面代碼實現中的HachiKeepAliveFilterInMina如下:

    

 

  有人說:心跳機制的filter只需要服務器端具有即可——這是錯誤的,拍着腦袋想一想,看看factory,你就知道了。心跳需要通信兩端的實現

  另外,版本2.0 RC1中,經過測試,當心跳的時間間隔INTERVAL設置爲60s(Session的存活時間)的時候心跳會失效,所以最好需要小於60s的間隔。

 

更多可參考:

http://www.ibm.com/developerworks/cn/java/j-lo-mina2

 

 

以上只是初步使用的一點經驗,2和3的部分很難在網上找到,所以分享出來,因爲時間關係、可能有些偏頗或者錯誤,望指正交流。

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