1.網(wǎng)上關(guān)于網(wǎng)絡(luò)斷線(xiàn)這個(gè)問(wèn)題的處理的資料確實(shí)很少。有寫(xiě)說(shuō)在Mina的框架里修改Session close.但都沒(méi)有給出相關(guān)的處理。對(duì)于一個(gè)不是深入了解那框架的人,確實(shí)是件不容易的事情。
2.下面給出一個(gè)自己的處理方案.
就是利用Connection的ConnectionListener.
下面是具體寫(xiě)法
mConnection.addConnectionListener( new ConnectionListener() { //當(dāng)網(wǎng)絡(luò)斷線(xiàn)了,重新連接上服務(wù)器觸發(fā)的事件 @Override public void reconnectionSuccessful() { // TODO Auto-generated method stub System. out .println( "reconnectionSuccessful" ); } //重新連接失敗 @Override public void reconnectionFailed(Exception arg0) { // TODO Auto-generated method stub System. out .println( "reconnectionFailed" ); } //重新連接的動(dòng)作正在進(jìn)行的動(dòng)作,里面的參數(shù)arg0是一個(gè)倒計(jì)時(shí)的數(shù)字,如果連接失敗的次數(shù)增多,數(shù)字會(huì)越來(lái)越大,開(kāi)始的時(shí)候是14 @Override public void reconnectingIn( int arg0) { System. out .println( "time: " +arg0); // TODO Auto-generated method stub System. out .println( "reconnectingIn" ); } //這里就是網(wǎng)絡(luò)不正常斷線(xiàn)激發(fā)的事件 @Override public void connectionClosedOnError(Exception arg0) { // TODO Auto-generated method stub System. out .println( "connectionClosedOnError" ); } //這里是正常關(guān)閉連接的事件 @Override public void connectionClosed() { // TODO Auto-generated method stub System. out .println( "connectionClosed" ); } }); |
不是像上面那樣,add了一個(gè)Listener搞定了,你要觸發(fā)這個(gè)listener就要在你想判斷聯(lián)網(wǎng)是否正常的時(shí)候,使用一下XMPPConnection.isConnected()這個(gè)方法。
他就會(huì)自動(dòng)檢測(cè)這個(gè)Connection并且處理Listener里面的事件
可以寫(xiě)一個(gè)線(xiàn)程來(lái)專(zhuān)門(mén)檢測(cè)比如:
new Thread(){ public void run() { while ( true ){ try { sleep( 3 * 1000 ); System.out.println( "thread info con: " +mConnection.isConnected()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; }.start(); |
這就是3秒檢測(cè)一下,就不用去修改Openfire了,Connection默認(rèn)的情況下是會(huì)自動(dòng)連接上去的。
聯(lián)系客服