默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] MobileIMSDK-Web发消息到app,消息出现在线离线交替发送
环境:jdk :1.8.065  
           tomcat : 8.0.37.0
           rabbitmq:3.7.7
           node.js:v4.4.7

问题说明:
1、pc端用户跟app用户是好友关系的时候,app发消息到pc端,消息是正常的,pc发送app时就出现这种消息在线离线交替发送,所有的离线消息在那个app用户重新登录之后又可以获取
2、pc端用户跟app用户是非好友关系的时候,发送的消息全部收不到

server log:
第一条消息是离线的
[INFO] - [16:39:26.327][IMMQ-↓] - [startWorker()中] 收到一条新消息(routingKey=q_web2app,contentType=null,consumerTag=amq.ctag-g8X9mJ16u48o27upvxvJZA,deliveryTag=10),马上开始处理。。。。 | (MQProvider$4^handleDelivery:477)
[INFO] - [16:39:26.328][IMCORE-桥接↓] - [startWorker()中] 收到异构服务器的原始 msg:{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s8\\n\",\"t\":\"400104\",\"ty\":0}","fp":"993b1520-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null}, 即时进行解析并桥接转发(给接收者)... | (BridgeProcessor^work:62)
[INFO] - [16:39:26.328][IMCORE]toSession==null >> id=400105的用户尝试发给客户端400104的消息:str={"cy":0,"f":"400105","m":"s8\n","t":"400104","ty":0}因接收方的id已不在线,此次实时发送没有继续(此消息应考虑作离线处理哦). | (LocalSendHelper^sendData:177)
[INFO] - [16:39:26.328][IMCORE-桥接↓]>> 客户端400105发送给400104的桥接数据尝试实时发送没有成功(400104不在线),将交给应用层进行离线存储哦... 【第一阶段APP+WEB跨机通信算法】 | (BridgeProcessor^work:80)
[DEBUG] - [16:39:26.328][RBChat]【离线存储】[chatType=0,gid=null]正在处理:400105发给400104的离线消息:str={"cy":0,"f":"400105","m":"s8\n","t":"400104","ty":0},fingerPring=993b1520-feb2-11e8-8ef9-e3805ee86f53...... | (ChatServerUtils^processOfflineTextMessage:89)
[DEBUG] - [16:39:26.330]queryData{SQL: select 1 from missu_offline_history where         history_content2 is not null and history_content2='993b1520-feb2-11e8-8ef9-e3805ee86f53'} | (DBShell^queryData:275)
[DEBUG] - [16:39:26.392][IMCORE-桥接↓]>> 向400105发送993b1520-feb2-11e8-8ef9-e3805ee86f53的消息【离线处理】成功,from=400104. 【第一阶段APP+WEB跨机通信算法】 | (BridgeProcessor^work:91)
第二条消息是离线的
[INFO] - [16:39:30.166][IMMQ-↓] - [startWorker()中] 收到一条新消息(routingKey=q_web2app,contentType=null,consumerTag=amq.ctag-2vSk486olWLRcje8H18X6A,deliveryTag=13),马上开始处理。。。。 | (MQProvider$4^handleDelivery:477)
[INFO] - [16:39:30.166][IMCORE-桥接↓] - [startWorker()中] 收到异构服务器的原始 msg:{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s9\",\"t\":\"400104\",\"ty\":0}","fp":"9b852c30-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null}, 即时进行解析并桥接转发(给接收者)... | (BridgeProcessor^work:62)
[INFO] - [16:39:30.168][IMCORE-桥接↓] - 400105发给400104的指纹为9b852c30-feb2-11e8-8ef9-e3805ee86f53的消息转发成功!【第一阶段APP+WEB跨机通信算法】 | (BridgeProcessor^work:73)
[INFO] - [16:39:30.179][IMCORE]<< 收到客户端{uid:400104}/192.168.1.125:7801的ACK应答包发送请求. | (ServerCoreHandler^messageReceived:189)
[DEBUG] - [16:39:30.179]【@】当前在线用户共(2)人-------------------> | (OnlineProcessor^__printOnline:98)
[DEBUG] - [16:39:30.179][IMCORE-桥接QoS!]【QoS机制_S2C】收到接收者400104回过来的指纹为9b852c30-feb2-11e8-8ef9-e3805ee86f53的应答包. | (LogicProcessor^processACK:177)
[WARN] - [16:39:30.179]【IMCORE-桥接QoS!】【QoS发送方】指纹为9b852c30-feb2-11e8-8ef9-e3805ee86f53的消息已成功从发送质量保证队列中移除(可能是收到接收方的应答也可能是达到了重传的次数上限),重试次数=0 | (QoS4SendDaemonRoot^remove:393)

imsdk log:
[2018-12-13 16:42:00.332] [DEBUG] console - [IMSDK] >> [E]服务端收到本客户端:/#Hfxga90rbm7c66oLAAAA(name=400105) C_IMEVT_COMMON$DATA 事件,即将送给指定的人({"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s8\",\"t\":\"400104\",\"ty\":0}","fp":"f50724c0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null}) 。。。
[2018-12-13 16:42:00.332] [DEBUG] console - [UserProcessor.getSession]======>user_id=400104在列表中吗?false
[2018-12-13 16:42:00.332] [INFO] console - [hashmap.js_showAll()] 正在输出HashMap内容(列表长度 1) ------------------->
[2018-12-13 16:42:00.332] [INFO] console - [hashmap.js_showAll()]       > key=400105, value=/#Hfxga90rbm7c66oLAAAA
[2018-12-13 16:42:00.332] [DEBUG] console - [IMSDK-G-MQ↑] >> [E]【C2C桥接】/#Hfxga90rbm7c66oLAAAA(name=400105) 正在发送给 400104,消息:{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s8\",\"t\":\"400104\",\"ty\":0}","fp":"f50724c0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null} 【他在线吗?FALSE】,马上转入桥接发送↗ !
[2018-12-13 16:42:00.339] [INFO] console - [3-IMMQ-↑] - [startPublisher()中] publish()成功了(ok=undefined) !(数据:,q_web2app,{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s8\",\"t\":\"400104\",\"ty\":0}","fp":"f50724c0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null})【OK】
[2018-12-13 16:42:00.339] [INFO] console - [IMSDK-G-MQ↑] >> [E]【C2C桥接】/#Hfxga90rbm7c66oLAAAA(name=400105) 发送给 400104 的消息:{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s8\",\"t\":\"400104\",\"ty\":0}","fp":"f50724c0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null} 已成功发出。【OK】
[2018-12-13 16:42:03.323] [DEBUG] console - [IMSDK] >> [E]服务端收到本客户端:/#Hfxga90rbm7c66oLAAAA(name=400105) C_IMEVT_COMMON$DATA 事件,即将送给指定的人({"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s9\",\"t\":\"400104\",\"ty\":0}","fp":"f6cf61a0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null}) 。。。
[2018-12-13 16:42:03.323] [DEBUG] console - [UserProcessor.getSession]======>user_id=400104在列表中吗?false
[2018-12-13 16:42:03.323] [INFO] console - [hashmap.js_showAll()] 正在输出HashMap内容(列表长度 1) ------------------->
[2018-12-13 16:42:03.323] [INFO] console - [hashmap.js_showAll()]       > key=400105, value=/#Hfxga90rbm7c66oLAAAA
[2018-12-13 16:42:03.323] [DEBUG] console - [IMSDK-G-MQ↑] >> [E]【C2C桥接】/#Hfxga90rbm7c66oLAAAA(name=400105) 正在发送给 400104,消息:{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s9\",\"t\":\"400104\",\"ty\":0}","fp":"f6cf61a0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null} 【他在线吗?FALSE】,马上转入桥接发送↗ !
[2018-12-13 16:42:03.329] [INFO] console - [3-IMMQ-↑] - [startPublisher()中] publish()成功了(ok=undefined) !(数据:,q_web2app,{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s9\",\"t\":\"400104\",\"ty\":0}","fp":"f6cf61a0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null})【OK】
[2018-12-13 16:42:03.329] [INFO] console - [IMSDK-G-MQ↑] >> [E]【C2C桥接】/#Hfxga90rbm7c66oLAAAA(name=400105) 发送给 400104 的消息:{"type":"2","from":"400105","to":"400104","dataContent":"{\"cy\":0,\"f\":\"400105\",\"m\":\"s9\",\"t\":\"400104\",\"ty\":0}","fp":"f6cf61a0-feb2-11e8-8ef9-e3805ee86f53","typeu":3,"msgTime":null} 已成功发出。【OK】

截图说明:下图我是s1发到s10,单数可以收到
[已回复] MobileIMSDK-Web发消息到app,消息出现在线离线交替发送_从s1发到s10,单数能收到

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

推荐方案
评论 6
我也碰到类似的情况,没有更改任何代码,过了十分钟左右,突然自动就好了,感觉不太稳定。
引用:Jamin 发表于 2018-12-14 14:29
这个版本改过来了,还是会出现这个现象,您说的UserProcessor这个是im-sdk的对象对吗?日志这边打印是不 ...

IM的环节非常多,我支持的各种im项目和其他客户的反馈,都没有碰到你描述的问题。远程的情况下,发现有的信息,确实很难准确地给你建议,费解啊
你回忆一下,有改过MobileIMSDK或MobileIMSDK-Web的框架核心层代码吗?

这个版本改过来了,还是会出现这个现象,您说的UserProcessor这个是im-sdk的对象对吗?日志这边打印是不在线[UserProcessor.getSession]======>user_id=400104在列表中吗?false

360截图18200427516680.png (4.21 KB, 下载次数: 883)

360截图18200427516680.png

你这个问题确实有点奇怪 ,按理说不应该发生这种事情,而且其他客户,以及我这边的项目都没有遇到过。

你先把这个rabbitmq的版本卸载,安装成跟我一样的版本,先排除rabbitmq的问题:
[已回复] MobileIMSDK-Web发消息到app,消息出现在线离线交替发送_WX20181213-190532@2x.jpg

其次,当pc端给app端发送消息的时候,你在app服务器这边的代码加一些log:目的是确认,你现在打印出来的日志里说,对方不在线的时候,是否真的不在线(用户在不在线是在MobileIMSDK的UserProcessor里管理的),这种相隔这么短,上一条消息时它在线,下一条又不在线的情况,在算法里几乎不可能,所以你要确认这个在线用户管理器里,是否真的跟你日志里抓到的一样。用户在不在线,只有UserProcessor里是最准确的。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部