2012-05-21 20 views
2

我正在用asmack打幾件事(從https://github.com/Flowdalic/asmack獲得)&谷歌服務。 我嘗試使用服務「gmail.com」發送多個數據包(聊天消息的形式)到我的gtalk,但我收到的消息無序 ..使用asmack發送多個聊天消息到gtalk;沒有序列

下面是在連續

String to = "[email protected]" // eg: gtalk ID 


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

這裏發送15包(「聊天消息」),代碼爲笏拼命地跑兩次,當我得到的GTALK我..

out of order chat messages http://s15.postimage.org/inpgzbyiz/gtalk_messages.png 我做錯了什麼..任何人都可以幫我解決問題是嗎?

預先感謝

+0

從未注意到這種效果,但是IIRC普通XMPP沒有對消息順序做出任何保證。也許有一個XEP的。 – Flow

回答

3

,而不是使用Chat類發送您的MSG的數據包,並將其作爲聊天封郵件:

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

不創建一個新的聊天,每次(也許這就是在你的代碼故障,U不斷創造每次迭代都會有一個新的Message對象),將第一個語句保留在for循環之外

+0

我試着不在每次迭代中創建Message對象,雖然沒有正常工作(我沒有按正確的順序/我沒有收到一些數據包),但你是正確使用'聊天'類,並嘗試使用'sendMessage'發送消息,我確實使用這個鏈接聊天使用此鏈接http://www.igniterealtime.org/builds/smack/docs/latest/documentation/messaging.html發現有用。我嘗試將消息的數量從15增加到25 ..它未能同步...所以我決定使用聊天更適當地處理它,而不是盲目地使用for循環發送... –

+0

@ vedant1811我正面臨着在使用asmack從xmpp服務器發送和接收android設備上的消息時出現的問題,你可以通過這個[link](http://chat.stackoverflow.com/rooms/68853/trying-to-learn)來幫助我解決問題, 謝謝 –

4

RFC-6120

XMPP服務器務必保證按順序的節和接收在給定的輸入流從 連接的客戶端 其他XML元素或加工遠程服務器。

(讀取規格爲更多的細節)

然而,這並不意味着無論您的服務器或客戶端正確實施。首先假定服務器是正確的,然後在asmack中查找排隊問題。

+0

關於該服務器的假設是正確的,它實際上有效,可能是我用循環發送數據包的錯誤方式,當我試圖通過處理程序發送它時,我得到了正確順序的所有消息+ 1。 –

+0

@Joe Hildebrand我在使用asmack從xmpp服務器發送和接收android設備上的消息時遇到了問題,您可以通過此鏈接(http://chat.stackoverflow.com/rooms/68853/trying-to-學習)來幫助我解決問題,謝謝 –

相關問題