【问题标题】:Sending multiple chat messages using asmack to gtalk; Out of sequence使用 asmack 向 gtalk 发送多条聊天消息;乱序
【发布时间】:2012-05-28 03:49:11
【问题描述】:

我对 asmack(从 https://github.com/Flowdalic/asmack 获得)和谷歌服务感到厌烦。 我尝试使用服务 "gmail.com" 向我的 gtalk 发送多个数据包(以聊天消息的形式),但我收到的消息乱序 ..

以下是连续发送 15 个数据包(“聊天消息”)的代码

   String to = "testing@gmail.com"  // eg: gtalk ID


   for(int i =1;i<15;i++){
         Message msg = new Message(to, Message.Type.chat); 
         msg.setBody(i+"");
         connection.sendPacket(msg);
      }

这是我在运行两次时正在使用 gtalk..

我做错了什么..有人可以帮我吗?

提前致谢

【问题讨论】:

  • 从未注意到这种影响,但 IIRC 普通 XMPP 不对消息顺序做出任何保证。也许有一个 XEP。

标签: android xmpp smack google-talk asmack


【解决方案1】:

来自RFC-6120:

XMPP 服务器必须确保按顺序处理节和 它通过给定输入流从 连接的客户端或远程服务器。

(阅读规范了解更多详情)

但是,这并不意味着您的服务器或客户端都已正确实现。首先假设服务器是正确的,然后在 asmack 中查找排队问题。

【讨论】:

  • 关于该服务器的假设是正确的,它确实有效,可能是我使用循环发送数据包的错误方式,当我尝试通过处理程序发送它时,我得到了所有按正确顺序发送消息,为此 +1。
  • @Joe Hildebrand 我在使用 asmack 从 xmpp 服务器在 android 设备上发送和接收消息时遇到问题,你能过来 link 帮助我解决问题吗,谢谢
【解决方案2】:

不是将您的消息作为数据包发送,而是使用 Chat 类将它们作为聊天消息发送:

Chat chat = connection.getChatManager().createChat(String userJID, MessageListener listener);
chat.sendMessage(string);

不要每次都创建一个新的聊天(也许这是你的代码的问题,你在每次迭代中都继续创建一个新的 Message 对象),将第一个语句保留在你的 for 循环之外

【讨论】:

  • 我尝试不在每次迭代中创建 Message 对象,但这不起作用(我没有按正确的顺序/我没有收到一些数据包),你是对的'Chat' 类并尝试使用'sendMessage' 发送消息,我确实使用此链接igniterealtime.org/builds/smack/docs/latest/documentation/… 玩过聊天,发现很有用。我尝试将消息数量从 15 条增加到 25 条……它无法同步……所以我决定使用 Chat 更恰当地处理它,而不是使用 for 循环盲目发送……
  • @vedant1811 我在 android 设备上使用 asmack 从 xmpp 服务器发送和接收消息时遇到问题,你能过来这个link 帮助我解决问题吗,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多