如何获得传入XMPP消息的时间戳?(How to get timestamp of incoming

2019-07-30 02:10发布

我使用aSmack库与远程XMPP服务器进行通信。 我能够发送/接收消息,但我想收到的消息的时间戳。

你能告诉我请,是否有可能呢? 因为我无法找到有关这个问题的任何东西。

提前致谢

Answer 1:

时间戳不是正规的消息的一部分。 因此,你不能提取它。

有一个规范(由@Dmitry提到),但这只适用于特定类型的消息。 通常,那些不是实时的,如离线和创建新的订阅时发布节点的最后一个发布订阅消息。 这些是内置了一个固有的延迟的消息。



Answer 2:

由于规格需要时间属性的XMPP消息:

http://xmpp.org/extensions/xep-0203.html#protocol

检查<delay的项<message

<delay xmlns='urn:xmpp:delay'
 from='capulet.com'
 stamp='2002-09-10T23:08:25Z'>
Offline Storage
</delay> 

但得到它看起来有点棘手。 只要aSmack重新编译啪一些替代的东西,所以设法得到它喜欢这里的方法:

http://edwin.baculsoft.com/2011/06/how-to-get-offline-messages-timestamp-on-openfire/

DelayInformation inf = null;
try {
    inf = (DelayInformation)packet.getExtension("x","jabber:x:delay");
} catch (Exception e) {
    log.error(e);
}
// get offline message timestamp
if(inf!=null)
    Date date = inf.getStamp();

Problably,您需要检查哪些服务器消息作为扩展值将和替换"jabber:x:delay"'urn:xmpp:delay' ,因为它是在XMPP协议中所示规格的例子。

但是不知道它的工作原理。



Answer 3:

虽然部分其他答案的融合已经在这里,我将提出的答案如下...

XMPP是“实时” ......虽然这个词可能意味着很多不同的事情,不同的人,一般你可以安全地假设你收到消息(几乎)只要他们发送 - 所有XMPP软件的设计是围绕履行这个目标。

然而,有关于终端到终端的潜伏期无实际担保。 在一般的做法通常您总是收到一条消息,远低于第二它是由发送器发射后,虽然网络状况会影响这一点。

在某些情况下,该消息将被暂时延迟,例如,当一个新的服务器到服务器的连接需要建立。 这可能需要高达几秒钟通常,网络条件和认证服务器之间使用的方法同样取决于。

消息也给耽误了,如果接收方不在线 - 收件人的服务器可以在“离线消息”店举行的消息,直到当接收方上线时,能带来改变。

因为XMPP消息的一般即时交付的,时间戳一般不包括在消息本身中,因为该信息是无用的(并假定时钟是正确的)。

另外,在消息被故意延迟虽然情况下,如在上面的例子中,延迟消息的实体可以插入标签成表示该消息的原始时间信息。 这在详细延迟传送:XEP-0203 。



Answer 4:

这也适用于4.1.9

DelayInformation inf = null;
                    inf = (DelayInformation)message.getExtension(DelayInformation.ELEMENT,DelayInformation.NAMESPACE);
                    if (inf != null){
                        Date date = inf.getStamp();
                        System.out.println("date: "+date);
                    }


Answer 5:

随着嫌4.2.0-RC2-快照版本可以很容易地访问,

DelayInformation delayInformation = forwarded.getDelayInformation();
delayInformation.getStamp().getTime();


文章来源: How to get timestamp of incoming xmpp message?