【问题标题】:XMPP aSmack MultiUserChat server continues to send already received messagesXMPP aSmack MultiUserChat 服务器继续发送已经收到的消息
【发布时间】:2012-02-15 18:51:41
【问题描述】:

我是堆栈上的新用户,但我在适用于 android 的 aSmack 库 3.2.1 中的 MultiUserChat 存在问题。我正在使用“gtalk.google.com”服务器。这是一个简单的例子,我只是房间里的一个人:

 String room="myConference@conference.jabber.org";
 MultiUserChat muc = new MultiUserChat(connection,room);
 muc.join(userNameInRoom);

 muc.addMessageListener(new PacketListener()
 {
    @Override
    public void processPacket(Packet packet)
    {
         ...
    }
 });

之后:

 muc.sendMessage("Text message");

在日志中:

DEBUG/SMACK(281): 06:46:29 PM SENT (1140866576): <message id="gsMe7-18"
to="myConference@conference.jabber.org" type="groupchat"><body>Text message
</body></message>

DEBUG/SMACK(281): 06:46:29 PM RCV  (1140866576): <message
from="myConference@conference.jabber.org/userNameInRoom" to="userName"
type="groupchat"><body>Text message</body></message>

结果:“短信”是正确的,但是:

我再次收到“短信”的存在:

DEBUG/SMACK(281): 06:54:12 PM RCV  (1140866576): <presence 
from="myConference@conference.jabber.org/userNameInRoom" to="userName"><x xmlns=
"vcard-temp:x:update"><photo/></x><x xmlns="http://jabber.org/protocol/muc#user">
<item affiliation="owner" role="moderator"/><status code="110"/></x></presence>

DEBUG/SMACK(281): 06:54:12 PM RCV  (1140866576): <message 
from="myConference@conference.jabber.org/userNameInRoom" to="userName"
type="groupchat"><body>Text message</body><delay stamp="2012-02-15T17:46:31Z" 
from="myConference@conference.jabber.org" xmlns="urn:xmpp:delay"/><x 
stamp="20120215T17:46:31" from="myConference@conference.jabber.org" 
xmlns="jabber:x:delay"/></message>

每当服务器向我发送存在信息时,我都会一次又一次地收到它。它以大约 5 分钟的间隔无限继续。是的,在 30 分钟内,我收到了大约 6 条“短信”消息。如果我发送超过 1 条消息,所有这些消息都会在状态发送给我时毫无例外地收到。

我的 MultiUserChat 有什么问题,这里有什么延迟交付?

感谢关注!

【问题讨论】:

  • 有趣,我能补充的是status code 101 的意思是“MUC/用户组合的从属关系更改”
  • 流,谢谢评论。但是状态码是 110 而不是 101。状态码 110 表示在场发送,是真的。
  • IIRC,这是 google talk 中的一些奇怪行为,他们会每隔一段时间重新广播你的存在,这会导致房间很奇怪。

标签: android xmpp asmack


【解决方案1】:

在“@conference.jabber.org”的情况下,我没有找到解决方案,我决定是因为 GTalk 服务器和正确版本的 MultiUserChat 的问题是“@groupchat.google.com”的情况。

我将代码更改为:

room=roomName+"@conference.jabber.org";
MultiUserChat muc = new MultiUserChat(connection, room);

muc.create(userName);

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));

到:

room="private-chat-" + UUID.randomUUID().toString() + "@groupchat.google.com";
MultiUserChat muc = new MultiUserChat(connection, room);

muc.join(userName);

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));

我试过了,但我遇到了新问题 - 当用户收到邀请消息并接受它时,两个客户端都崩溃了 XmlPullException "END_TAG expected" 和类似 "" 的内​​容logcat 中的最后一个位置。

我开始用谷歌搜索这个问题并找到了原因。我使用了 beem 客户端的 asmack(顺便说一句,在此之前我使用了 asmack 开发人员的 asmack-7)以及我如何知道它是基于 smack 3.1...我发现 smack 3.2.0 决定了这个问题。我下载了 asmack 的Flow's version,对此我很满意。

最后我想说“谢谢!!!”流向正确版本的 aSmack,它比其他版本更好。

【讨论】:

  • 很高兴我能帮上忙。不要忘记为我努力保持最新状态的original answer 点赞。
【解决方案2】:

这不是因为您的客户端,也不是错误,那是因为您服务器的 GroupChat 的历史设置配置为在进入房间时发送特定数量的聊天历史

【讨论】:

  • 能否请您提供有关如何解决问题的更多详细信息
  • 你在使用 OpenFire 服务器吗?
猜你喜欢
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
相关资源
最近更新 更多