默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 求助MobileIMSDK做的IM自已修改代码后,C2C 消息发送ACK问题
阅读(38512) | 评论(5 收藏 淘帖
  先说前提:代码是修改过的。原版代码没有问题。新修改的有问题
问题描述:c2c发送好友消息时,A 发送消息给好友B。 B能收到消息。但是B不发送接受到消息的ACK反馈,导致A端一直在转圈圈,A认为发送失败,会再次进行消息的发送。
源码代码看过我贴两张关键的图片,一个是接受消息的地方,一个是发送消息的地方。
正确的代码图片,只是加入日志:
eclipse是正常的代码
IDEA是收不到回调的代码。
打印的日志如下:
正常的日志如下:
发送====>bridge:false,type:51,datacontent:{},from:0,to:300150,fp:null,QoS:false,typeu:-1,retryCount:0
接收到===>>>bridge:false,type:2,datacontent:{"cy":0,"f":"300148","m":"消息内容","t":"300150","ty":0},from:300148,to:300150,fp:50f2b829-96ce-40bd-b431-1ccfaa9d2b5f,QoS:true,typeu:3,retryCount:0
[INFO] - [19:53:16.633][IMCORE]>> 收到客户端{uid:300148}/10.66.40.216:63798的通用数据发送请求. | (ServerCoreHandler.messageReceived:126)
[DEBUG] - [19:53:16.634]【@】当前在线用户共(2)人-------------------> | (OnlineProcessor.__printOnline:66)
发送====>bridge:false,type:2,datacontent:{"cy":0,"f":"300148","m":"消息内容","t":"300150","ty":0},from:300148,to:300150,fp:50f2b829-96ce-40bd-b431-1ccfaa9d2b5f,QoS:true,typeu:3,retryCount:0
接收到===>>>bridge:false,type:4,datacontent:50f2b829-96ce-40bd-b431-1ccfaa9d2b5f,from:300150,to:300148,fp:null,QoS:false,typeu:-1,retryCount:0
[INFO] - [19:53:16.702][IMCORE]>> 收到客户端{uid:300150}/10.66.40.216:63927的ACK应答包发送请求. | (ServerCoreHandler.messageReceived:113)
[DEBUG] - [19:53:16.702]【@】当前在线用户共(2)人-------------------> | (OnlineProcessor.__printOnline:66)
发送====>bridge:false,type:4,datacontent:50f2b829-96ce-40bd-b431-1ccfaa9d2b5f,from:300150,to:300148,fp:null,QoS:false,typeu:-1,retryCount:0
[DEBUG] - [19:53:16.702][IMCORE-本机QoS!]【QoS机制_C2C】300150发给300148的指纹为50f2b829-96ce-40bd-b431-1ccfaa9d2b5f的应答包已成功转发?true | (LogicProcessor.processACK:112)
接收到===>>>bridge:false,type:1,datacontent:{},from:300148,to:0,fp:null,QoS:false,typeu:-1,retryCount:0

错误的日志如下:
<<<====bridge:false,type:2,datacontent:{"cy":0,"f":"300148","m":"发送内容","t":"300150","ty":0},from:300148,to:300150,fp:dc3f6e76-bbde-4126-9b91-3e838eb4a2a9,QoS:true,typeu:3,retryCount:0
2019-11-06 20:02:55.129  INFO 12784 --- [pool-5-thread-6] n.o.m.server.ServerCoreHandler           : [IMCORE]>> 收到客户端{uid:300148}/10.66.40.216:63935的通用数据发送请求.
2019-11-06 20:02:55.129 DEBUG 12784 --- [pool-5-thread-6] n.o.m.server.processor.OnlineProcessor   : 【@】当前在线用户共(2)人------------------->
====>>>bridge:false,type:2,datacontent:{"cy":0,"f":"300148","m":"发送内容","t":"300150","ty":0},from:300148,to:300150,fp:dc3f6e76-bbde-4126-9b91-3e838eb4a2a9,QoS:true,typeu:3,retryCount:0
<<<====bridge:false,type:1,datacontent:{},from:300150,to:0,fp:null,QoS:false,typeu:-1,retryCount:0




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

标签:MobileIMSDK

wrong1.png (90.95 KB, 下载次数: 1008)

wrong1.png

wrong.png (96.1 KB, 下载次数: 980)

wrong.png

right2.png (80.86 KB, 下载次数: 964)

right2.png

QQ图片20191106194212.png (67.12 KB, 下载次数: 965)

QQ图片20191106194212.png
上一篇:瓜子IM智能客服系统的数据架构设计(整理自现场演讲,有配套PPT)下一篇:IM里“附近的人”功能实现原理是什么?如何高效率地实现它?
推荐方案
评论 5
引用:mark7788 发表于 2019-11-07 10:37
1,我没有修改mina服务器端通讯SDK功能(MobileIMSDKServerXOpen),改动只是加上日志,如图所示。
2, ...

那就太奇怪了。你用的是github里下载的最新代码吗。
实在不行,你就把你编译的jar,反编译一下,跟rainbowchat的反编译一下,用beyong compare这个工具,进行逐个类的全文比对,看看有什么差异。
引用:JackJiang 发表于 2019-11-06 21:56
你描述的有点乱,我有两个问题:
1)你改动了什么代码?改动和目的是什么?
2)这句话该怎么理解?“发送 ...

1,我没有修改mina服务器端通讯SDK功能(MobileIMSDKServerXOpen),改动只是加上日志,如图所示。
2,客户端android代码是同一套,是两个手机。依托于mima的服务器端(rainbowchat)有两个版本。一个是原版的。一个是我们依托于原版rainbowchat开发的。当服务器端启动rainbowchat原版本的时候能正常收到ack。当关闭原版本,开启自己开发的版本时收不到ack。
你描述的有点乱,我有两个问题:
1)你改动了什么代码?改动和目的是什么?
2)这句话该怎么理解?“发送的消息内容一样。消息协议除了指纹不一样,其他的都一样。怎么会出现一个能收到ack,一个不能收到ack呢?”:意思是说,你修改后的代码,运行在两个手机上,一个手机上的ACK正常,另一个不正常?

3 楼: mark7788 Lv.1 楼主 5 年前
方便看日志,我格式化了下

log.png (95.45 KB, 下载次数: 967)

log.png

2 楼: mark7788 Lv.1 楼主 5 年前
发送的消息内容一样。消息协议除了指纹不一样,其他的都一样。怎么会出现一个能收到ack,一个不能收到ack呢?
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部