我正在使用eJabberd服务器(启用MAM)和客户端库Strophe.js。客户端应用程序将固定数量的消息存储在本地存储中。
我从服务器收到的所有消息都包括元素<archived/>和<stanza-id/>,它们提供服务器端生成的ID:
<message
xmlns="jabber:client" to="aaa@example.net/8667085700924567016834" from="aaa@example.net">
<result
xmlns="urn:xmpp:mam:2" id="1520510373346685">
<forwarded
xmlns="urn:xmpp:forward:0">
<message
xmlns="jabber:client" xml:lang="en" to="bbb@example.net" from="aaa@example.net/60965696931000870402419" type="chat">
<archived
xmlns="urn:xmpp:mam:tmp" by="aaa@example.net" id="1520510373346685"/>
<stanza-id
xmlns="urn:xmpp:sid:0" by="aaa@example.net" id="1520510373346685"/>
<body>asdf</body>
</message>
<delay
xmlns="urn:xmpp:delay" from="example.net" stamp="2018-03-08T11:59:33.346685Z"/>
</forwarded>
</result>
</message>我使用这些ID在每个MAM调用上获得固定数量的消息(使用RSM分页-在前面/后/max属性中)。例如:
params = {
"before": "1520510373346685",
"max": 10,
onMessage: <some handler>,
onComplete: <some handler>,
}
this.connection.mam.query(Strophe.getBareJidFromJid(this.myJid), params);这给我提供了10条消息,然后是带有节id 1520510373346685的消息。
但是,我发送给的消息本质上没有这个ID,直到我发送它们并从MAM中检索为止。
我没有找到从服务器获取当前发送的消息ID的任何示例,在从客户端发送消息并由服务器接收消息后,Strophe不提供任何回调。
那么,这个问题--有什么方法可以为当前发送的消息获取服务器生成的消息ID (节-id/存档)吗?
也许我自己的方法是错误的-我应该生成我自己的it并将它添加到来自客户端的每条消息中吗?
发布于 2018-03-13 16:56:10
目前除了查询存档之外,没有指定任何机制。XMPP社区未来解决这个问题的一个突出想法是将发送碳反射回原始发件人,这将包括一个包含由归档分配ID的节ID元素。
https://stackoverflow.com/questions/49260090
复制相似问题