默认
发表评论 2
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 请教MobileIMSDK服务端的sendData方法返回false却走成功回调?
服务端调用 boolean sendOK = LocalSendHelper.sendData(pFromClient);向客户端发消息,此方法返回false,文档中sendDatapublic static boolean sendData(Protocal p)
                        throws java.lang.Exception
向目标发送一条数据。
注:用户id为"0"是MobileIMSDK框架中的保留值,表示是服务端。
参数:
p - 要发送的内容(此对象封装了发送方user_id、接收方user_id、消息内容等)
返回:
true表示发送完成,false表示发送失败

false明明是代表发送失败,按理说应该走messagesLost方法做离线,但是走的回调是messagesBeReceived我判断会不会是这段代码影响的
byte[] res = p.toBytes();
                IoBuffer buf = IoBuffer.wrap(res);
                WriteFuture future = session.write(buf);
                future.awaitUninterruptibly(100L);
                if (future.isWritten()) {
                    if ("0".equals(p.getFrom())) {
                        if (p.isQoS() && !QoS4SendDaemonS2C.getInstance().exist(p.getFp())) {
                            QoS4SendDaemonS2C.getInstance().put(p);
                        }
                    } else if (p.isBridge() && p.isQoS() && !QoS4SendDaemonB2C.getInstance().exist(p.getFp())) {
                        QoS4SendDaemonB2C.getInstance().put(p);
                    }

                    return true;
                }

WriteFuture future = session.write(buf); 这块其实已经写出去了,然后客户端那边收到了就给应答了,所以服务端这边走成功回调,而future.awaitUninterruptibly(100L);这块又超时了,所以sendData返回false,不知道我推测的是否正确,如果正确该如何处理?

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MobileIMSDK
上一篇:[已回复] 用于MobileIMSDK开发即时通讯成功和失败回调异步并发的疑问下一篇:[已回复] 请教mobileIMSDK怎么进行压力测试?

本帖已收录至以下技术专辑

推荐方案
评论 2
因为netty或mina框架里送出udp包,其实是都是异步实现的,所以这个返回值相对于messagesBeReceived()方法回调,肯定是messagesBeReceived更有意义,这个是在QoS送达保证机制范围严格可控的。
引用:JackJiang 发表于 2018-08-24 23:08
因为netty或mina框架里送出udp包,其实是都是异步实现的,所以这个返回值相对于messagesBeReceived()方法回 ...

签名: 今天天气很好
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部