写点什么

日记 2021 年 2 月 4 日 (周四)

用户头像
Changing Lin
关注
发布于: 2021 年 02 月 04 日
日记 2021年2月4日(周四)

再一次,证明我是对的。

现象:客户端网络环境差的情况下,多次申请话权,导致应用崩溃

原因:通过分析日志,原来是因为由于客户端接收到多个允许讲话指令;第一个指令过了 3.6s 才回来;第二个指令过了 1.8s 才回来;第三个指令过了 0.2s 就回来了;由于代码中设置的过滤条件是 2s,就是说 RTT 2s 以内的指令都会进行被处理,从而导致开启 2 次推流动作,开启了 2 个线程进行采集编码麦克风数据,导致其中一个线程 OOM 了。如下:

[I][2021-02-03 +8.0 21:08:26.308][9866, 28632][z0][, , 0][onTalkEvent: messageType = 338talkType = 1action = 82diff = 3608message = 话权申请成功[I][2021-02-03 +8.0 21:08:26.543][9866, 2*][z0][, , 0][ControlEvent{action=1, roomJid='a5d04676a8144328af9be1843dc58d84', roomName='产业软件中心', callType=0, holder=null, degree=0, isSpeaking=false}[I][2021-02-03 +8.0 21:08:26.543][9866, 2*][z0][, , 0][当前单呼个数: 0[I][2021-02-03 +8.0 21:08:26.544][9866, 2*][z0][, , 0][startSpeak 当前状态: false[I][2021-02-03 +8.0 21:08:26.544][9866, 2*][z0][, , 0][sendSocketInfo: true[I][2021-02-03 +8.0 21:08:26.544][9866, 2*][z0][, , 0][sendSocketInfo: messageType = 257talkType = 1action = 1time = 1612357706544[I][2021-02-03 +8.0 21:08:26.779][9866, 28634][z0][, , 0][onTalkEvent: messageType = 338talkType = 1action = 82diff = 1884message = 话权申请成功[I][2021-02-03 +8.0 21:08:26.779][9866, 28634][w0][, , 0][onTalkEvent: RECEIVE_PERMIT_TALK_ACTION...[I][2021-02-03 +8.0 21:08:26.779][9866, 28634][w0][, , 0][允许讲话:talkType = 1[E][2021-02-03 +8.0 21:08:26.779][9866, 28634][w0][, , 0][startPusherHandler。。。[I][2021-02-03 +8.0 21:08:26.781][9866, 2*][w0][, , 0][startPusher: g.k.l.i.c@6ec0c4a-SocketUserInfo{messageType=338, talkType=1, talkAction=82, roomId='a5d04676a8144328af9be1843dc58d84', callType=0, userId='314', userName='郑伟佳', status=0, roomUserNum=0, userIds=null, listen=false, id=6d469508b42349c9ba1175a77651fdcf, time=1612357704895, message=话权申请成功}[I][2021-02-03 +8.0 21:08:26.781][9866, 2*][OpusAudioStream][, , 0][构造方法: MpAudioStream: g.k.h.b.c@b07c032-g.k.v.a.c.j.b@7884183-1[I][2021-02-03 +8.0 21:08:26.781][9866, 2*][OpusAudioStream][, , 0][帧延时: 40-4[I][2021-02-03 +8.0 21:08:26.784][9866, 28634][h][, , 0][stopHeartBeat: false[I][2021-02-03 +8.0 21:08:26.785][9866, 28634][z0][, , 0][onTalkEvent: messageType = 338talkType = 1action = 82diff = 241message = 话权申请成功[I][2021-02-03 +8.0 21:08:26.785][9866, 28634][w0][, , 0][onTalkEvent: RECEIVE_PERMIT_TALK_ACTION...[I][2021-02-03 +8.0 21:08:26.785][9866, 28634][w0][, , 0][允许讲话:talkType = 1
复制代码

解决:既然清楚了客户端崩溃问题出现的原因,也就有了解决的思路。剩下的就是执行,如何避免出现这种情况,如何过滤忽略掉这种情况。从而修复这个客户端崩溃问题。wj 的意见是要做处理,如果已经在推流了,那么第二次就应该忽略。大体思路是一致的。但要执行这个方案,需要增加很多代码,缓存,占用内存空间不说,在多线程场景可能会引入其他问题。因为我清楚的知道,我的处理逻辑是生效了的,规避了第一次超时的允许讲话指令。所以我认为,只需要缩短 RTT 时间,就可以避免这个问题。同时,RTT 过长的指令,其实不满足项目要求,是不达标的。通过修改一个参数,巧妙的解决了 OOM 问题;

if (socketUserInfo.getTime() != 0 && diff >= 300){        return;}
复制代码

感悟体会:

1、时间戳是一个很有意思的东西。用的好的话,可以事半功倍,减少工作量,提高我们的效率。

2、我还是太懒散了。今天问了 lbx,开发票最快也要等一个星期。也就意味着,我的公积金无法在年前提取出来了。为什么事情是这样的结局呢?前几天,上周,本来可以提前去处理的。由于公司、工作、项目上的事情,占用了我太多的时间,并没有把这些重要的事情放在心上。

3、昨晚,8 点半下班就走了,去了棠下村一个理发店剪发。好几年没有去那个老板理发了,现在依然在营业也就说明他的店的能力了。不像之前坑我会员卡的那家理发店的老板,一脸猥琐的样子。有点伤感的是,时间过得很快,这几年发生了很多事情。我的发质越来越差,发量越来越少。这样忙忙碌碌,有没想过是为了什么。

4、今天收到了 InfoQ 的小牛了,很可爱,很萌。今年要牛转钱坤哦。距离回家,只剩下几天了。有没有设想过,要过一个怎样的春节呢?那自然是,每一天都能购自由、轻松、幸福的生活了。


发布于: 2021 年 02 月 04 日阅读数: 14
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
日记 2021年2月4日(周四)