openfire(七)搴曞眰妗嗘灦浠嬬粛-mina
openfire鍜屽鎴风涔嬮棿鐨勯€氫俊锛屼富瑕佷娇鐢ㄤ簡闃垮笗濂囩殑mina妗嗘灦锛宮ina涓昏鍩轰簬JDK鐨凬IO锛屽仛浜嗗緢澶氱殑灏佽锛屽紑鍙戣€呬笉蹇呭叧蹇冨簳灞傜綉缁滐紝mina涓轰綘瀹屾垚浜嗚繖浜涳紝浣犲彧闇€灏嗕綘鐨勭簿鍔涢泦涓湪涓氬姟灞傘€?/p>
聽
openfire涓娇鐢╩ina鐨勭増鏈瘮杈冧綆锛屽ソ鍍忔槸1.7鐗堟湰锛岀幇鍦ㄦ渶鏂扮殑鐗堟湰鏄?.0.7,涓嬮潰灏变互鏈€鏂扮増鏈?.0.7鍋氱畝鍗曚粙缁嶃€?/p>
聽
聽NioSocketAcceptor acceptor = new NioSocketAcceptor(); ---杩欎釜灏辨槸寮€鍚竴涓猻ocket鐨勬湇鍔″櫒
acceptor.bind(new InetSocketAddress(18567));--缁戝畾鍦板潃
acceptor.getFilterChain().addLast("log1", new LoggingFilter(getClass()));--澧炲姞鎷︽埅鍣?/p>
acceptor.setHandler(IoHandlerAdapter);--璁剧疆娑堟伅澶勭悊绫?/p>
聽
IoHandlerAdapter鏄竴涓娊璞$被锛屽疄鐜扮殑IoHandler鎺ュ彛銆?/p>
聽
ioHandler锛?/p>
public abstract interface IoHandler
{
聽 public abstract void sessionCreated(IoSession paramIoSession)
聽 聽 throws Exception;
聽
聽 public abstract void sessionOpened(IoSession paramIoSession)
聽 聽 throws Exception;
聽
聽 public abstract void sessionClosed(IoSession paramIoSession)
聽 聽 throws Exception;
聽
聽 public abstract void sessionIdle(IoSession paramIoSession, IdleStatus paramIdleStatus)
聽 聽 throws Exception;
聽
聽 public abstract void exceptionCaught(IoSession paramIoSession, Throwable paramThrowable)
聽 聽 throws Exception;
聽
聽 public abstract void messageReceived(IoSession paramIoSession, Object paramObject)
聽 聽 throws Exception;
聽
聽 public abstract void messageSent(IoSession paramIoSession, Object paramObject)
聽 聽 throws Exception;
}
聽
鍏惰繍琛屾祦灞傛槸锛?/p>
1.褰撳鎴风鍜屾湇鍔$寤虹珛涓€涓繛鎺ワ紝浼氳皟鐢╯essionCreated锛?/p>
2.瀹㈡埛绔悜鏈嶅姟绔彂閫佹暟鎹紝浼氳皟鐢╯essionOpened------>messageReceived;
3.瀹㈡埛绔拰鏈嶅姟鍣ㄤ箣闂寸殑鏁版嵁鍦?span style="line-height: 1.5;">messageReceived涓幏鍙栥€?/span>
4.褰撳鎴风闂茬疆涓嬫潵浜嗭紝鏈嶅姟鍣ㄤ細璋冪敤sessionIdle锛岃繖涓昏閫氳繃浠ヤ笅浠g爜璁剧疆鐩稿叧鍙傛暟锛?/p>
SocketSessionConfig scfg = acceptor.getSessionConfig();
cfg.setIdleTime(IdleStatus.BOTH_IDLE, 10);褰?0s閽熸病鏈夎繘琛岃鍐欐搷浣滃氨浼氳皟鐢?span style="line-height: 1.5;">sessionIdle鏂规硶銆?/span>
聽
IdleStatus鏈?涓被鍨嬶細READER_IDLE锛學RITER_IDLE锛孊OTH_IDLE銆?span style="line-height: 1.5;">READER_IDLE涓鸿鐨勭┖闂茬被鍨嬶紱WRITER_IDLE锛屽啓鐨勭┖闂茬被鍨嬶紝BOTH_IDLE璇诲啓鐨勭┖闂茬被鍨?/span>
聽
鍦ㄨ繖涓柟娉曚腑锛屽彲浠ュ仛妫€娴嬫湇鍔$鍜屽鎴风涔嬮棿鐨勮繛鎺ユ槸鍚︿腑鏂紝濡傛灉涓柇灏卞仛鐩稿叧澶勭悊锛屾瘮濡傛妸杩欎釜鍥炶瘽绉婚櫎浼氳瘽鍒楄〃涓€?/span>
聽
5.褰撴湇鍔$瑕佸悜瀹㈡埛绔彂閫佹暟鎹殑鏃跺€欙紝浼氳皟鐢?/span>messageSent銆傚鏈嶅姟绔皟鐢╯ession.write(Object o);鐨勬椂鍊欙紝浼氳皟鐢ㄦ鏂规硶銆?/p>
聽 6.褰撳鎴风鍜屾湇鍔$閫氫俊寮傚父鐨勬椂鍊欙紝浼氳皟鐢?span style="line-height: 1.5;">exceptionCaught銆傝繖涓湴鏂逛竴鑸渶瑕佸仛澶勭悊锛屾瘮濡傚叧闂綋鍓嶄細璇濄€?/span> 聽 7.褰撳叧闂細璇濈殑鏃跺€欎細璋冪敤sessionClosed鏂规硶銆備竴鑸湪杩欎釜鍦版柟灏嗕細璇濆垪琛ㄤ腑鐨勪細璇濈Щ闄ゃ€?/p>
聽 聽 8.鏈嶅姟绔渶閲嶈鐨勪簨鎯呮槸锛氬鐞嗕笟鍔℃暟鎹紝寤虹珛鎷︽埅鍣ㄣ€傚湪閫氫俊鍚屽線寰€鏄互瀛楄妭鐮佺殑褰㈠紡浼犻€佺殑锛岃璇嗗埆瀵瑰簲鐨勪簩杩涘埗锛岄渶瑕佽繘琛岀浉鍏崇殑澶勭悊銆傚啓鐩稿叧鐨勬嫤鎴櫒灏辫兘瑙e喅鐩稿叧闂銆?/p>
mina涓烘垜浠凡缁忔彁渚涗簡寰堝鐨勬嫤鎴櫒锛屾瘮濡傛棩蹇楃殑锛歀oggingFilter锛屾瘮濡傚鐞嗘枃鏈殑锛?/p>
dc.addLast("dec", new ProtocolCodecFilter(new TextLineCodecFactory( Charset.forName("UTF-8")))); 杩欎釜灏嗚缃紪鐮佹柟寮忋€?/p>
鍦爋rg.apache.mina.filter鍖呬腑鍙互鐪嬪埌寰堝宸茬粡瀹炵幇鐨勮繃婊ゅ櫒銆?/p>
瀵逛簬杩囨护鍣ㄨ嚜宸卞疄鐜般€?/p>
瀹炵幇鎺ュ彛ProtocolCodecFactory锛屽湪杩欎釜鎺ュ彛涓渶瑕佹樉绀哄姞瑙g爜锛屽姞瑙g爜闇€瑕佸疄鐜扮浉鍏崇殑鎺ュ彛ProtocolDecoder锛孭rotocolEncoder銆?/p>
聽 瀵逛簬mina鎻愪緵浜嗕紶閫佸璞$殑杩囨护鍣紝濡侽bjectSerializationCodecFactory锛岀浉鍏冲璞¢渶瑕佸簭鍒楀寲銆?/p>
聽 鍦ㄩ€氫俊涓線寰€瑕佽缃嚜宸辩殑閫氫俊鎶ユ枃鏍煎紡锛岀幇鏈夌殑姣旇緝鎴愮啛鐨勬槸XMPP鎻愪緵鐨勫嵆鏃堕€氫俊鎶€鏈腑灏辨湁鐩稿叧浠嬬粛銆?/p>
聽 聽 涓嬮潰浠嬬粛瀹㈡埛绔柟闈㈢殑锛?/p>
IoConnector connector=new NioSocketConnector();--寤虹珛涓€涓猚onnection SocketSessionConfig dcfg = (SocketSessionConfig) this.connector.getSessionConfig();--鑾峰彇浼氳瘽閰嶇疆 ConnectFuture connFuture = this.connector.connect(new InetSocketAddress("localhost", 18567));--璁剧疆杩炴帴鍦板潃鍜岀鍙?/p>
connFuture.awaitUninterruptibly();--绛夊緟寤虹珛杩炴帴 session = connFuture.getSession();--鑾峰彇浼氳瘽銆?/p>
聽 connector.setHandler(IOhandler o);瀹㈡埛绔殑IOhandler聽鍜屾湇鍔$鐨勪竴鏍凤紝鍦ㄦ灏卞彲浠ュ仛鍜屾湇鍔$鐨勮繛鎺ユ搷浣滀簡銆?/span> 聽 聽 鍙槸瀵筸ina鍋氫簡绠€鍗曠殑浠嬬粛锛屾洿澶氳鏌ラ槄鍏朵粬璧勬枡銆?/p>
姝ょ瘒鏂囩珷灏卞埌姝わ紝绋嶅悗浼氭湁鏇村鍏充簬openfire鐨勪釜浜鸿В璇汇€?/p>
鑱旂郴鏂瑰紡锛坬q锛?851392159 鍑哄锛?a href="/" style="color: #108ac6; text-decoration: underline;">http://buerkai.iteye.com