【问题标题】:How can i handle Stream management duplicate record?如何处理流管理重复记录?
【发布时间】:2017-10-22 05:18:15
【问题描述】:
  • 我正在实施 XMPPStreamManagement XEP-198,但我的最后一条消息重复了多次

    _xmppStreamManagement = [[XMPPStreamManagement alloc] initWithStorage:[XMPPStreamManagementMemoryStorage new]];             
    // And then configured however you like.
    // This is just an example:
    _xmppStreamManagement.autoResume = YES;
    _xmppStreamManagement.ackResponseDelay = 0.2;
    [_xmppStreamManagement requestAck];
    [_xmppStreamManagement automaticallyRequestAcksAfterStanzaCount:3 orTimeout:0.4];
    [_xmppStreamManagement automaticallySendAcksAfterStanzaCount:10 orTimeout:5.0];
    
    [_xmppStreamManagement addDelegate:self delegateQueue:dispatch_get_main_queue()];
    [_xmppStreamManagement activate:self.xmppStream];
    
  • 之后我在 xmpp Stream 上启用了流并验证了委托方法

    // Check to see we resumed a previous session
    NSArray *stanzaIds = nil;
    if ([_xmppStreamManagement didResumeWithAckedStanzaIds:&stanzaIds serverResponse:NULL]){
    // Situation A
    }else {
    // Situation B
    //[self goOnline];
    [self.xmppStream sendElement:[XMPPPresence presence]]; // send available presence
    if ([sender supportsStreamManagement]) {
        [_xmppStreamManagement enableStreamManagementWithResumption:YES maxTimeout:0];
    }
    }
    
  • 请建议我在哪里以及如何解决重复的消息重复,也不调用 XMPPStreamManagement 委托方法的

【问题讨论】:

    标签: ios objective-c chat openfire


    【解决方案1】:

    为避免消息重复,您应该在消息 id 上添加唯一性检查。由于每个消息包都包含唯一的 id,因此您应该检查该 id 以避免重复消息。

    <message from='userA@yourdomain.io' to='userB@yourdomain.io' id='msg_1'>
        <body>Shall we meet?</body>
    </message>
    

    【讨论】:

    • 好的,谢谢,但这不是我的问题,我正在努力,我想我解决了大约 80% 的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多