Openfire - 监控服务 - 获取群聊记录
Openfire - Monitoring Service - Get group chat history
我已经安装并配置了带有监控服务插件的 Openfire 服务器,以保留聊天记录。
当用户在public房间聊天时,所有的聊天消息都保存在数据库中,我在select行时可以看到来自 MySQL table。
我的一个要求是让用户能够看到他的 "old" 消息。为了能够做到这一点,必须发送 IQ Stanzas,这在以下 link 中得到了很好的解释:http://xmpp.org/extensions/xep-0136.html#manage
我的 IQ 节看起来像:
<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 节,我收到以下输出:
<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>
问题 1
聊天记录只返回消息正文,不返回消息属性(比如我发消息的时候,我给它设置了额外的属性,我在这个聊天记录中需要它们)。有没有办法启用此功能?
问题 2
为什么同一条消息被多次返回?在我的例子中,每条消息都被返回了 3 次,虽然我只发送了一次消息?
关于问题 1
我已经检查了监控插件代码,它只返回消息正文。由于源代码是公开的,您可以根据自己的需要进行修改。
关于问题 2
检查数据库并确认消息 ID 是否相同,因为重复可能是由于未从服务器获得确认而从客户端应用程序重新提交相同的消息。
我已经安装并配置了带有监控服务插件的 Openfire 服务器,以保留聊天记录。
当用户在public房间聊天时,所有的聊天消息都保存在数据库中,我在select行时可以看到来自 MySQL table。
我的一个要求是让用户能够看到他的 "old" 消息。为了能够做到这一点,必须发送 IQ Stanzas,这在以下 link 中得到了很好的解释:http://xmpp.org/extensions/xep-0136.html#manage
我的 IQ 节看起来像:
<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 节,我收到以下输出:
<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>
问题 1
聊天记录只返回消息正文,不返回消息属性(比如我发消息的时候,我给它设置了额外的属性,我在这个聊天记录中需要它们)。有没有办法启用此功能?
问题 2
为什么同一条消息被多次返回?在我的例子中,每条消息都被返回了 3 次,虽然我只发送了一次消息?
关于问题 1
我已经检查了监控插件代码,它只返回消息正文。由于源代码是公开的,您可以根据自己的需要进行修改。
关于问题 2
检查数据库并确认消息 ID 是否相同,因为重复可能是由于未从服务器获得确认而从客户端应用程序重新提交相同的消息。