2015-09-07 5 views
5

im हो रही है रखता है:XMPP कनेक्शन कोड हर समय यहां पर सक्रिय मेरी xmpp कनेक्शन रखने के लिए एक सेवा का उपयोग कट एंड्रॉयड

public class XMPPService extends Service { 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    new ConnectionStatus().execute(); 
    return START_STICKY; 
} 

@Override 
public void onCreate() { 
    Log.i("service", "created"); 

} 
public class ConnectionStatus extends AsyncTask{ 

    @Override 
    protected Object doInBackground(Object[] params) { 
     XMPPClient.getConnection().addConnectionListener(
       new AbstractConnectionListener() { 
        public void connectionClosed() { 
         Log.i("connection", "closed"); 

        } 

        public void connectionClosedOnError(Exception e) { 
         Log.i("connection", "closed on error"); 

        } 

        public void reconnectionFailed(Exception e) { 
         Log.i("reconnection", "failed"); 

        } 

        public void reconnectionSuccessful() { 
         if (XMPPClient.getConnection().isAuthenticated()) { 
          Log.i("isauthenticauted : ", String.valueOf(XMPPClient.getConnection().isAuthenticated())); 
          Log.i("reconnection", "succesful"); 
         } else { 
          try { 
           XMPPClient.getConnection().login(new TinyDB(getApplicationContext()).getString("username"), new TinyDB(getApplicationContext()).getString("password")); 
          } catch (XMPPException e) { 
           e.printStackTrace(); 
          } catch (SmackException e) { 
           e.printStackTrace(); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
          Log.i("reconnection", "succesful"); 
         } 
        } 

        public void reconnectingIn(int seconds) { 
         Log.i("reconnectingIn", String.valueOf(seconds)); 
        } 

       } 
     ); 

     return null; 
    } 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

}

लेकिन कनेक्शन नियमित अंतराल और मैं पर काट दिया हो रही रखता है इस मिल:

org.jivesoftware.smack.SmackException: Parser got END_DOCUMENT event. This could happen e.g. if the server closed the connection without sending a closing stream element 
     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1148) 
     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937) 
     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952) 
     at java.lang.Thread.run(Thread.java:818) 

और उसके बाद यह सर्वर से पुनः कनेक्ट करने शुरू होता है और उसके बाद मैं इस मिल:

09-07 17:56:03.916 17754-20996/com.sports.unity D/SMACK﹕ SENT (0):   `09-07 17:56:04.217 17754-20997/com.sports.unity D/SMACK﹕ RECV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='2025993121' from='mm.io' version='1.0' xml:lang='en'><stream:features><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='Kyn00yB1iXiJLUJ0gVvn7tZREMg='/><register xmlns='http://jabber` 

कैसे xmpp सर्वर

+0

सर्वर पक्ष पर संपत्ति सेट क्लाइंट अंतराल को –

+0

डिस्कनेक्ट करने के लिए कभी भी डिस्कनेक्ट नहीं किया जाता है, लेकिन यह अभी भी ड्रॉप और डोजेंट को पूरी तरह से कनेक्ट करता रहता है। –

+0

@anupamx क्या आपको कोई समाधान मिला है? –

उत्तर

0

यह मूलतः होता है जब आपके ग्राहक बेकार अधिक से अधिक तो निष्क्रिय समय है करने के लिए एक स्थिर conenction रखने के लिए ("निष्क्रिय कनेक्शन नीति") आपके server.For पर निर्दिष्ट यह आप की जरूरत है सर्वर पिंग के जवाब के रूप में एक्सएमपीपी पिंग कक्षाओं को अपनी स्मैक/एस्मैक लाइब्रेरी में लागू करें जिसमें आपको एक्सएमपीपी पोंग भेजना होगा। और आप एक्सएमपीपी पुन: कनेक्शन कक्षाओं को भी कार्यान्वित कर सकते हैं।

+0

क्या इसका मतलब यह है कि हमें समय-समय पर सर्वर को पिंग करना होगा ताकि कनेक्शन जिंदा रहे? –

+0

आप निष्क्रिय कनेक्शन नीति के तहत 'निष्क्रिय कनेक्शन समय' बढ़ा सकते हैं और उस समय स्लॉट के भीतर पोंग के साथ प्रतिक्रिया दे सकते हैं या फिर क्लाइंट कनेक्शन को "निष्क्रिय होने वाले ग्राहकों को डिस्कनेक्ट न करें" के रूप में सेट करते हैं, यह आपके क्लाइंट को मैन्युअल रूप से डिस्कनेक्ट होने तक जीवित रखेगा। क्लाइंट को जीवित रखने में भी गलत उपस्थिति (यानी ऑनलाइन और ऑफ़लाइन) के कारण संदेश हानि जैसी कमी है। – Deepesh

+0

@ दीपेश - मैं एक चैट एप्लिकेशन पर भी काम कर रहा हूं और एक ही समस्या का सामना कर रहा हूं। जिस चीज का आपने यहां उल्लेख किया है, "निष्क्रिय होने वाले ग्राहकों को डिस्कनेक्ट न करें"। मैं ऐसा करने के लिए कैसे प्राप्त कर सकता हूं? –

संबंधित मुद्दे