Domanda

Sto avendo un problema con un'applicazione che utilizza Smack 3.1 e un openfire esecuzione del server. All'avvio dell'applicazione, si leggerà l'ultimo messaggio sul nodo. Questo non funziona in quanto i messaggi vengono analizzati, elaborati e inseriti in un db. Oltre l'invio di un messaggio di tempo di creazione nel payload, c'è qualche modo per fermare questa duplicazione? (In realtà se v'è comunque per segnalare che un messaggio è stato "consumato" sarebbe fantastico)

È stato utile?

Soluzione

Se lei si riferisce a PubSub, allora è possibile configurare il nodo in modo che non persiste oggetti con persist_items e max_items.

Se si dispone di alcun controllo sulla creazione dei nodi allora cosa si può fare è controllare per lo spazio dei nomi ritardo (jabber:x:delay e / o urn:xmpp:delay) nel pacchetto

public void processPacket(Packet pkt) {
   DelayInformation delay = (DelayInformation)pkg.getExtension("x", "jabber:x:delay");
   if (delay != null)
      return; //Discard this packet
   delay = (DelayInformation)pkg.getExtension("x", "urn:xmpp:delay");
   if (delay != null)
      return; //Discard this as well
   //Otherwise this is a good packet
   ...
}

Si può anche fare qualche decisione esaminando l'oggetto DelayInformation per quanto tempo, la ragione, ecc

Se è PEP allora si avrà sempre ottiene l'ultimo elemento pubblicato e penso che ci sia alcun modo di determinare se è stato ritardato vale a dire. non v'è alcun ritardo informazioni nel pacchetto.

È necessario ottenere sia nightly build o costruire il proprio per il supporto PubSub. Non credo che l'attuale versione 3.1.0 Smack supoorts PubSub.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top