Question

Je suis un problème avec une application à l'aide Smack 3.1 et un serveur openfire en cours d'exécution. Au démarrage de l'application, il va lire le dernier message sur le nœud. Cela ne fonctionne pas car les messages sont analysés, traités et placés dans un db. En plus d'envoyer un message temps de création dans la charge utile, est-il un moyen d'arrêter cette duplication? (En fait, s'il est de toute façon pour signaler qu'un message a été « consommé » serait fantastique)

Était-ce utile?

La solution

Si vous faites référence à PubSub vous pouvez configurer le nœud afin qu'il ne persiste pas les articles avec persist_items et max_items.

Si vous avez aucun contrôle sur la création de nœuds alors ce que vous pouvez faire est de vérifier pour l'espace de noms de retard (jabber:x:delay et / ou urn:xmpp:delay) dans le paquet

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
   ...
}

Vous pouvez également prendre une décision en examinant l'objet DelayInformation à combien de temps, la raison, etc.

S'il est PEP alors vous obtenez toujours le dernier élément publié et je pense qu'il n'y a pas moyen de déterminer si elle a été retardée à savoir. il n'y a pas d'information de retard dans le paquet.

Vous devez soit obtenir nightly builds ou construire votre propre pour le soutien de PubSub. Je ne pense pas que la version actuelle 3.1.0 Smack supoorts de PubSub.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top