1

我在使用 Smack 3.1 的应用程序和运行 openfire 的服务器时遇到问题。启动应用程序后,它将读取节点上的最后一条消息。这不起作用,因为消息被解析、处理并放入数据库中。除了在有效负载中发送消息创建时间之外,还有什么方法可以阻止这种重复?(实际上,如果有任何迹象表明一条消息已被“消费”,那就太好了)

4

1 回答 1

1

如果您指的是 pubsub,那么您可以配置节点,使其不使用persist_items和持久化项目max_items

如果您无法控制节点创建,那么您可以做的是检查数据包中的延迟命名空间(jabber:x:delay和/或urn:xmpp:delay

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

您还可以通过检查DelayInformation对象的时间长短、原因等来做出决定。

如果是 PEP,那么您将始终发布最后一个项目,我认为无法确定它是否被延迟,即。数据包中没有延迟信息。

您需要每晚构建构建自己的构建以获取pubsub 支持。我认为当前版本的 Smack 3.1.0 不支持 pubsub。

于 2010-09-22T03:18:45.907 回答