当用户收到错误或断开与XMPP的连接时,重新连接XMPP

时间:2014-08-12 06:56:29

标签: ios xmpp

我在XMPP框架的帮助下实现了一个聊天应用程序。但是我收到的错误如下所示:

xmpp did receive error:-
Printing description of error:
<stream:error xmlns:stream="http://etherx.jabber.org/streams"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-streams"></conflict><text xmlns="urn:ietf:params:xml:ns:xmpp-streams" lang="">Replaced by new connection</text></stream>

需要一些指导,了解可能导致此错误的原因以及如何使用XMPP重新连接。

感谢。

2 个答案:

答案 0 :(得分:5)

使用XMPPReconnect类..

@property (nonatomic, readonly) XMPPReconnect *xmppReconnect;

self.xmppReconnect = [[XMPPReconnect alloc] init];
[self.xmppReconnect activate:self.xmppStream];
[self.xmppReconnect addDelegate:self delegateQueue:dispatch_get_main_queue()];

并实施&#39; XMPPReconnect&#39;委托方法

- (void)xmppReconnect:(XMPPReconnect *)sender didDetectAccidentalDisconnect:(SCNetworkReachabilityFlags)connectionFlags
{
    NSLog(@"didDetectAccidentalDisconnect:%u",connectionFlags);
}
- (BOOL)xmppReconnect:(XMPPReconnect *)sender shouldAttemptAutoReconnect:(SCNetworkReachabilityFlags)reachabilityFlags
{
    NSLog(@"shouldAttemptAutoReconnect:%u",reachabilityFlags);
    return YES;
}

答案 1 :(得分:0)

我相信当客户端从服务器收到此错误时,XMPPReconnect将停止工作。检查XMPPReconnect.m。您将在委托函数中看到,当收到此错误时,变量shouldReconnect将设置为NO,这意味着将不再进行重新连接尝试。

解释是“正常”当另一个客户端使用相同资源连接时会收到此错误,因此禁用XMPPReconnect以避免两个不同客户端和服务器之间重新连接和断开连接的无限循环。

但是,我注意到即使只连接了一个客户端,有时也会出现此错误。因此,如果您确定没有两个不同的客户端会尝试同时连接到服务器,我建议将行设置shouldReconnect注释为NO,从而允许XMPPFramework将其视为普通断开连接。