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