【发布时间】:2010-09-21 20:15:00
【问题描述】:
我在使用 Smack 3.1 的应用程序和运行 openfire 的服务器时遇到问题。启动应用程序后,它将读取节点上的最后一条消息。这不起作用,因为消息被解析、处理并放入数据库中。除了在有效负载中发送消息创建时间之外,还有什么方法可以阻止这种重复? (实际上,如果有任何信号表明消息已“消费”,那就太好了)
【问题讨论】:
-
你指的是什么类型的消息/节点?
我在使用 Smack 3.1 的应用程序和运行 openfire 的服务器时遇到问题。启动应用程序后,它将读取节点上的最后一条消息。这不起作用,因为消息被解析、处理并放入数据库中。除了在有效负载中发送消息创建时间之外,还有什么方法可以阻止这种重复? (实际上,如果有任何信号表明消息已“消费”,那就太好了)
【问题讨论】:
如果您指的是 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,那么您将始终获得最后一个发布的项目,我认为无法确定它是否被延迟,即。数据包中没有延迟信息。
您需要获得 nightly builds 或 build your own 以获得 pubsub 支持。我认为当前版本的 Smack 3.1.0 不支持 pubsub。
【讨论】: