我正在使用smack库在我的Android设备上实现基于xmpp的聊天。考虑用户的互联网连接消失且用户仍在设备上键入一些离线消息的情况。
考虑何时再次恢复互联网连接,有一个以下xml节的队列:
chatstate:撰写
chatstate:active
消息:文字
chatstate:暂停
现在,在完成与ejabberd的连接以及所需的身份验证检查后,Smack会将所有排队的节发送到服务器。
以下是服务器端收到的一些节目:
<r xmlns='urn:xmpp:sm:3'/><presence id='TO9VT-163' type='unavailable'></presence><r xmlns='urn:xmpp:sm:3'/><presence id='TO9VT-164' type='unavailable'></presence><r xmlns='urn:xmpp:sm:3'/><presence id='TO9VT-165' type='unavailable'></presence><presence id='TO9VT-197'><status>away</status><show>away</show><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='os2Kusj3WEOivn5n4iFr/ZEO8ls='/></presence><r xmlns='urn:xmpp:sm:3'/><presence id='TO9VT-166' type='unavailable'></presence><r xmlns='urn:xmpp:sm:3'/><r xmlns='urn:xmpp:sm:3'/><a xmlns='urn:xmpp:sm:3' h='84'/><r xmlns='urn:xmpp:sm:3'/>
服务器收到的Xml包含很多在线类型=不可用的节。这会导致客户端状态在线和离线之间切换,有时最终会脱机。
当实际客户端打开聊天窗口(在线)时,这会导致误导状态,但在服务器客户端上注册为脱机状态,因此消息不会被用户接收并存储在服务器的脱机存储中。
任何人都可以解释一下smack库的上述行为。