我已经使用Monitoring Service插件安装和配置了Openfire服务器,以便保留聊天记录。
当用户在公共场所中聊天时,所有聊天消息都会保存在数据库中,当我从所属的MySQL表中选择行时,我可以看到它们。
我的一个要求是让用户能够看到他的老人"消息。为了做到这一点,必须发送IQ Stanzas,这在以下链接中得到了很好的解释:http://xmpp.org/extensions/xep-0136.html#manage
我的智商Stanza看起来像:
<iq type="get" id="pref1" xmlns="jabber:client">
<retrieve xmlns="urn:xmpp:archive" with="user1@conference.kfm" start="2016-07-11T06:27:45.140Z">
<set xmlns="http://jabber.org/protocol/rsm">
<max>30</max>
</set>
</retrieve>
</iq>
对于那个IQ Stanza,我收到以下输出:
<iq xmlns="jabber:client" type="result" id="pref1" to="testuser@kfm/b2yg0qj04r">
<chat xmlns="urn:xmpp:archive" with="user1@conference.kfm" start="2016-07-29T13:45:24.245Z">
<from secs="0" jid="user1@kfm">
<body>This is just test</body>
</from>
<from secs="0" jid="user1@kfm">
<body>This is just test</body>
</from>
<from secs="0" jid="user1@kfm">
<body>This is just test</body>
</from>
<to secs="7">
<body>Who is testing?</body>
</to>
<to secs="0">
<body>Who is testing?</body>
</to>
<to secs="0">
<body>Who is testing?</body>
</to>
<from secs="8" jid="user1@kfm">
<body>I'M testing</body>
</from>
<from secs="0" jid="user1@kfm">
<body>I'M testing</body>
</from>
<from secs="0" jid="user1@kfm">
<body>I'M testing</body>
</from>
<to secs="5">
<body>Ok</body>
</to>
<to secs="0">
<body>Ok</body>
</to>
<to secs="0">
<body>Ok</body>
</to>
<to secs="1">
<body>super</body>
</to>
<to secs="0">
<body>super</body>
</to>
<to secs="0">
<body>super</body>
</to>
<set xmlns="http://jabber.org/protocol/rsm">
<first index="0">0</first>
<last>14</last>
<count>15</count>
</set>
</chat>
</iq>
在聊天记录中只返回消息正文,但没有消息属性(例如,当我发送消息时,我为其设置了其他属性,我在此聊天记录中需要它们)。有没有办法启用此功能?
为什么多次返回相同的消息?在我的情况下,每条消息都返回3次,但是,我只发送了一次消息?
答案 0 :(得分:1)
关于问题1
我已经检查过监控插件代码,它只返回消息体。由于源是公开可用的,您可以根据需要进入并进行一些修改。
关于问题2
检入数据库并确认消息ID是否相同,因为重复可能是由于未从服务器获得确认而从客户端应用程序重新提交相同的消息。