Sono un po 'nuovo a Google Cloud Messaging. Ci lavoriamo da un paio di mesi, ma solo di recente abbiamo ricevuto messaggi di "Connection Draining". Quando ciò accade, tutte le comunicazioni si fermano.Apertura della nuova connessione dopo Connection Draining. Google Cloud Messaging
Google dice: https://developer.android.com/google/gcm/ccs.html#response
Quando si riceve un messaggio CONNECTION_DRAINING, si dovrebbe iniziare immediatamente l'invio di messaggi a un altro collegamento CCS, aprendo una nuova connessione, se necessario. Tuttavia, è necessario mantenere la connessione originale aperta e continuare a ricevere i messaggi che potrebbero passare attraverso la connessione (e inserirli). CCS gestirà l'avvio di una connessione chiusa quando è pronta.
La mia domanda è
- Se apro una nuova connessione manualmente, come fa a sapere quale connessione da utilizzare se non chiudo la connessione esistente?
- Se vengono inviati contemporaneamente 6 messaggi, come posso impedire al metodo di aprire 6 connessioni? O sono confuso su questo?
- Perché si verifica il drenaggio della connessione?
Sono sorpreso che questo non sia già stato messo in gioco nel loro codice di esempio. Sembra che sia praticamente tutto ciò di cui hai bisogno. È già fatto per me nel codice e mi manca?
Non ho un metodo principale nel mio codice, ho invece i servlet utente come trigger. La mia connessione è inizializzata in questo modo
@PostConstruct
public void init() throws Exception{
try {
smackCcsClient.connect(Long.parseLong(env.getProperty("gcm.api")), env.getProperty("gcm.key"));
}catch (IOException e){
e.printStackTrace();
}catch(SmackException e){
e.printStackTrace();
}catch(XMPPException e){
e.printStackTrace();
}
}
tuttavia dopo questo non tocco mai più la connessione. Sto gestendo questo sbagliato, è la connessione qualcosa che dovrei toccare più frequentemente o qualcosa di cui ho bisogno per tenere traccia di?
_______________________ADDED DOPO LA QUESTION_________________________
ho aggiunto un collegamento all'interno del loro codice di esempio per provare a reinizializzare una connessione. Ecco come si presenta:
if ("CONNECTION_DRAINING".equals(controlType)) {
connectionDraining = true;
//Open new connection because old connection will be closing or is already closed.
try {
connect(Long.parseLong(env.getProperty("gcm.api")), env.getProperty("gcm.key"));
} catch (XMPPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SmackException e) {
e.printStackTrace();
}
} else {
logger.log(Level.INFO, "Unrecognized control type: %s. This could happen if new features are " + "added to the CCS protocol.",
controlType);
}
Qualche idea? Per favore? –