请选择 进入手机版 | 继续访问电脑版

默认
发表评论 11
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
关于IM群聊回执的技术实现思路问题求助
大神 ,昨天给了我好多启发,非常感谢,单聊时跑通了,但是群聊有点儿问题,就是群聊的回执,现在的需求就是,A发送到群,现在想让A接收到发送成功的回执,A只需要接收一次回执不就行了嘛?是要群里的所有的人收到消息之后才进行回执嘛?因为没有发送完就接收到回执,会引起不再进行三次机制的发送。

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

上一篇:IM中已建立长连接的情况下,用它给app推送和用极光推有什么差距?下一篇:选择本地图库之后,图片在gridview里面显示不出来----注明:去除裁剪功能后
推荐方案
评论 11
不是的,因为群聊消息是你发送一条到服务端,再由服务端进行扩散发送,所以只要你发送给服务端成功,服务端回给你的回执就表明发送成功了,至于其它人有没有收到,就由服务端的机制来保证就可以了。

具体你可以详细看看这篇文章:《IM群聊消息的已读回执功能该怎么实现?
引用:JackJiang 发表于 2018-06-15 11:42
不是的,因为群聊消息是你发送一条到服务端,再由服务端进行扩散发送,所以只要你发送给服务端成功,服务端 ...

您说的已读机制是可以实现的,但是服务端并没有给发送端一个回执。这个回执是需要我进行编写嘛?
引用:xushuhua 发表于 2018-06-15 13:08
您说的已读机制是可以实现的,但是服务端并没有给发送端一个回执。这个回执是需要我进行编写嘛?

消息发送回执,是由MobileIMSDK的QoS机制实现,不需要你管。
已读未读这种业务层的逻辑,需要你自已去实现
引用:JackJiang 发表于 2018-06-15 14:21
消息发送回执,是由MobileIMSDK的QoS机制实现,不需要你管。
已读未读这种业务层的逻辑,需要你自已去实 ...

但是我们现在没有回执才会引起这一系列的问题:',想知道什么会引起接收不到回执
引用:xushuhua 发表于 2018-06-15 14:48
但是我们现在没有回执才会引起这一系列的问题:',想知道什么会引起接收不到回执

你收起你的代码,下载原版官方demo,观察官方的demo走向。你能看demo里每一条消息,都会出现这条蓝色的回执通知:
175539uv9vq0udvh8zze2u.png

看到红色箭头指的东西了吗!
引用:JackJiang 发表于 2018-06-15 14:57
你收起你的代码,下载原版官方demo,观察官方的demo走向。你能看demo里每一条消息,都会出现这条蓝色的回 ...

// 【MobileIMSDK框架层协议:客户端与客户端、客户端与服务端之间的ACK应答包】
                    case ProtocalType.C.FROM_CLIENT_TYPE_OF_RECIVED:
                    {
                            logger.info("[IMCORE-netty]<< 收到客户端"+remoteAddress+"的ACK应答包发送请求.");
       
                            if(!OnlineProcessor.isLogined(session))
                            {
                                    LocalSendHelper.replyDataForUnlogined(session, pFromClient, null);
                                    return;
                            }
       
                            logicProcessor.processACK(pFromClient, remoteAddress);
                            break;
                    }

请问这个是单聊和群聊发送的服务器接收成功的回执入口吗?现在还是接收不到服务器接收成功的回执。

引用:JackJiang 发表于 2018-06-15 14:57
你收起你的代码,下载原版官方demo,观察官方的demo走向。你能看demo里每一条消息,都会出现这条蓝色的回 ...

我们现在是通过回调之后发送的回执来进行判断信息是否发送成功的,这是已读未读的控制回执,所以群发的时候碰见了很多问题,希望大神指教
引用:JackJiang 发表于 2018-06-15 14:57
你收起你的代码,下载原版官方demo,观察官方的demo走向。你能看demo里每一条消息,都会出现这条蓝色的回 ...

        @Override
        public void messagesBeReceived(String theFingerPrint)
        {
                if(theFingerPrint != null)
                {
                        logger.debug("【DEBUG_QoS_S2C事件】收到对方已收到消息事件的通知,fp="+theFingerPrint);
                }
        }

还是这个接口里需要加回执返回给发送方?

引用:xushuhua 发表于 2018-06-26 17:48
@Override
        public void messagesBeReceived(String theFingerPrint)
        {

你的描述比有点乱,你按我的疑问来回答,我看看你是怎么做的。

第一个问题:你要收回执的这个消息,是从哪里发出的?代码是怎么样的?(贴代码我看看)
引用:JackJiang 发表于 2018-06-26 18:28
你的描述比有点乱,你按我的疑问来回答,我看看你是怎么做的。

第一个问题:你要收回执的这个消息,是 ...

case ProtocalType.C.FROM_CLIENT_TYPE_OF_COMMON$DATA:
                    {
                            logger.info("[IMCORE-netty]<< 收到客户端"+remoteAddress+"的通用数据发送请求.");
                            //向客户发送一个IM回执,type=2
                            //logicProcessor.processACK(pFromClient, remoteAddress);
                            // 开始回调
                            if(serverEventListener != null)
                            {
                                    if(!OnlineProcessor.isLogined(session))
                                    {
                                            LocalSendHelper.replyDataForUnlogined(session, pFromClient, null);
                                            return;
                                    }
       
                                    // 【C2S数据】客户端发给服务端的消息
                                    if("0".equals(pFromClient.getTo()))
                                            logicProcessor.processC2SMessage(session, pFromClient, remoteAddress);
                                    // 【C2C数据】客户端发给客户端的消息
                                    else
                                            logicProcessor.processC2CMessage(bridgeProcessor, session
                                                            , pFromClient, remoteAddress);
                            }
                            else
                            {
                                    logger.warn("[IMCORE-netty]<< 收到客户端"+remoteAddress+"的通用数据传输消息,但回调对象是null,回调无法继续.");
                            }
                            break;
                    }
送客户端发送的信息  会走processC2CMessage()方法进行发送给发送方
引用:xushuhua 发表于 2018-06-26 18:51
case ProtocalType.C.FROM_CLIENT_TYPE_OF_COMMON$DATA:
                    {
                            logger.info("

你没有回答我的问题,要你贴的不是框架代码。。。 我写在8楼的问题你没看明白?
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部