Billyzou0741326 / bilibili-live-monitor-js

弃用 b站限制单ip连接数
MIT License
20 stars 5 forks source link

关于覆盖率 #65

Open Billyzou0741326 opened 4 years ago

Billyzou0741326 commented 4 years ago
id roomid type name created_at (时差)
1808040 14201872 guard 舰长 2019-12-28 09:51:38
1808041 2603963 guard 舰长 2019-12-28 09:52:56
1808042 21154366 guard 舰长 2019-12-28 09:53:08
1808043 21539718 guard 舰长 2019-12-28 09:53:16
1808044 21448055 storm 节奏风暴 2019-12-28 09:53:22
1808045 10556121 guard 舰长 2019-12-28 09:53:31
1808046 128135 storm 节奏风暴 2019-12-28 09:54:19
1808047 10556121 guard 舰长 2019-12-28 09:56:16
1808048 1448688 guard 舰长 2019-12-28 09:56:26
1808049 2259890 guard 舰长 2019-12-28 09:56:36
1808050 10556121 guard 舰长 2019-12-28 09:57:36
1808051 21570283 storm 节奏风暴 2019-12-28 09:57:42
1808052 302816 guard 舰长 2019-12-28 09:57:46
1808053 21539718 guard 舰长 2019-12-28 09:58:01
1808054 7654470 guard 舰长 2019-12-28 09:58:01
1808055 10642428 guard 舰长 2019-12-28 09:58:13
1808056 21539718 guard 舰长 2019-12-28 09:58:31
1808057 4348162 guard 舰长 2019-12-28 09:59:48
1808058 2259890 guard 舰长 2019-12-28 10:00:21
1808060 2613601 guard 提督 2019-12-28 10:01:01
1808061 824494 storm 节奏风暴 2019-12-28 10:01:30
1808062 4641942 storm 节奏风暴 2019-12-28 10:01:57
1808063 45972 guard 舰长 2019-12-28 10:03:01
1808064 21580043 guard 舰长 2019-12-28 10:03:11
1808065 21539718 guard 舰长 2019-12-28 10:03:56
1808066 12594500 guard 提督 2019-12-28 10:04:46
1808067 43668 guard 舰长 2019-12-28 10:05:16
1808068 757349 storm 节奏风暴 2019-12-28 10:05:29
1808069 3268068 storm 节奏风暴 2019-12-28 10:05:48
1808070 21448055 storm 节奏风暴 2019-12-28 10:06:04
1808071 21539718 guard 舰长 2019-12-28 10:06:21
1808072 21517049 guard 舰长 2019-12-28 10:06:58
1808073 3702265 storm 节奏风暴 2019-12-28 10:09:29
1808074 2603963 guard 舰长 2019-12-28 10:09:51
1808075 43668 guard 舰长 2019-12-28 10:10:21
1808076 3448829 storm 节奏风暴 2019-12-28 10:11:34
1808077 2625423 guard 舰长 2019-12-28 10:13:03
1808078 21517654 guard 舰长 2019-12-28 10:13:08
1808079 281727 guard 舰长 2019-12-28 10:15:11
1808080 11619634 storm 节奏风暴 2019-12-28 10:15:24
1808081 1011 guard 舰长 2019-12-28 10:15:43
1808082 21386005 guard 舰长 2019-12-28 10:17:31
1808084 21611039 guard 舰长 2019-12-28 10:18:46
1808085 12594500 guard 提督 2019-12-28 10:20:21
1808086 47557 guard 舰长 2019-12-28 10:22:18
1808087 21685737 guard 舰长 2019-12-28 10:22:43
1808088 21386005 guard 舰长 2019-12-28 10:23:51
1808089 21331425 guard 舰长 2019-12-28 10:24:11
1808090 21331425 guard 舰长 2019-12-28 10:24:41
1808091 3647211 guard 舰长 2019-12-28 10:26:11
1808092 3647211 guard 舰长 2019-12-28 10:26:21
1808093 21539718 guard 舰长 2019-12-28 10:26:41
1808094 21580043 guard 舰长 2019-12-28 10:27:46
1808095 21511979 storm 节奏风暴 2019-12-28 10:29:24
1808096 21525988 guard 舰长 2019-12-28 10:30:31
1808097 8128451 storm 节奏风暴 2019-12-28 10:31:34
1808098 392661 guard 舰长 2019-12-28 10:33:18
1808100 10556121 guard 舰长 2019-12-28 10:35:11
1808101 65482 guard 舰长 2019-12-28 10:36:13
1808102 12834857 guard 舰长 2019-12-28 10:39:56
1808103 21620337 guard 舰长 2019-12-28 10:39:56
1808104 989573 guard 舰长 2019-12-28 10:40:18
1808106 11619634 guard 舰长 2019-12-28 10:41:48
1808108 27760 storm 节奏风暴 2019-12-28 10:43:48
1808109 788361 guard 舰长 2019-12-28 10:46:58
1808110 21709053 guard 舰长 2019-12-28 10:51:18
1808111 3647211 guard 舰长 2019-12-28 10:51:41
1808112 424902 storm 节奏风暴 2019-12-28 10:51:47
1808113 306236 guard 舰长 2019-12-28 10:54:03
1808114 10556121 guard 舰长 2019-12-28 10:54:06
1808115 10556121 guard 舰长 2019-12-28 10:55:31
1808116 3297956 guard 舰长 2019-12-28 10:56:21
1808117 3580061 guard 舰长 2019-12-28 10:59:16
1808118 6065099 guard 舰长 2019-12-28 11:03:08
1808119 289079 storm 节奏风暴 2019-12-28 11:07:40
1808120 1362072 guard 舰长 2019-12-28 11:09:29
1808121 21456469 storm 节奏风暴 2019-12-28 11:09:57
1808122 7603080 guard 舰长 2019-12-28 11:10:16
1808123 544793 guard 舰长 2019-12-28 11:10:46
1808124 3641727 storm 节奏风暴 2019-12-28 11:13:25
1808125 14085407 guard 舰长 2019-12-28 11:14:36
1808126 21611039 guard 舰长 2019-12-28 11:14:41
1808127 3269965 guard 舰长 2019-12-28 11:15:29
1808128 81711 guard 舰长 2019-12-28 11:16:56
1808129 38781 guard 舰长 2019-12-28 11:17:26
1808130 12096201 guard 舰长 2019-12-28 11:18:44
1808131 12096201 guard 舰长 2019-12-28 11:19:14
1808132 6140913 guard 舰长 2019-12-28 11:19:21
1808133 11067408 guard 舰长 2019-12-28 11:22:01
1808134 544793 guard 舰长 2019-12-28 11:23:01
1808135 2777322 guard 舰长 2019-12-28 11:24:24
1808136 21058142 guard 舰长 2019-12-28 11:25:16
1808137 5503854 guard 舰长 2019-12-28 11:27:46
1808138 991520 storm 节奏风暴 2019-12-28 11:30:53
1808139 1267921 guard 舰长 2019-12-28 11:33:11
1808140 1135146 guard 舰长 2019-12-28 11:33:59
1808141 3113410 guard 舰长 2019-12-28 11:36:16
1808142 288400 guard 舰长 2019-12-28 11:36:26
1808143 1378879 guard 舰长 2019-12-28 11:36:31
1808144 14805603 guard 舰长 2019-12-28 11:39:09
1808145 3465508 guard 舰长 2019-12-28 11:40:51
1808146 5335284 guard 舰长 2019-12-28 11:44:14
1808147 8128451 guard 舰长 2019-12-28 11:46:34
1808148 10556121 guard 舰长 2019-12-28 11:48:31
1808149 11546841 storm 节奏风暴 2019-12-28 11:49:13
Pearlulu commented 4 years ago

onData 检测掉线的问题是... 掉了就不再触发onData了

这不是问题啊, 接收到消息会触发onData 然后清除计时器,再运行计时器 如果35秒之内又接收到消息 就清除计时器,再重新运行计时器 如果掉线了,35秒没收到消息,计时器函数运行this.close(false); 触不触发onData都没影响。

唯一的问题是35秒这个时间好不好。

推送的时间限制是指?

比如之前说的那个例子,重连房间后,那3个舰长会不会推送?或者说隔多久时间判定这三个舰长是过期的不推送。

Billyzou0741326 commented 4 years ago

不会了 b站只播报一次上舰的消息 没收到的话那就无了

Pearlulu commented 4 years ago

不会了 b站只播报一次上舰的消息 没收到的话那就无了

原来是这样子,掉线那段时间的就没了

试了下改到onData里,可以用,第一次多了hhh

1.png

Billyzou0741326 commented 4 years ago

tql

Billyzou0741326 commented 4 years ago

onData 没接收到消息都会触发 如果在这里面clear和set延时的话感觉性能上会有影响 run里的setInterval间隔调小一点就好了感觉

Pearlulu commented 4 years ago

确实,高峰期2W连接数,如果礼物再多点可能会爆内存

Billyzou0741326 commented 4 years ago

就两万了吗....

Pearlulu commented 4 years ago

今晚1W3房间开播的时候,我看是1W9 ESTABLISHED连接数。 刚在chrome里试了下

var timer; function run(){ clearTimeout(timer); timer = setTimeout(function(){console.log('重连');},1000); } var t = new Date().getTime(); for (let i=0;i<1000000;i++){ run(); } console.log(new Date().getTime() - t);

我这笔记本100W次用了188M内存 ,11398毫秒

Pearlulu commented 4 years ago

改到500万次,爆了5G内存。。setTimeout果然不能大量使用,又学到了。还是老实把setInterval的值调小点好使。

Billyzou0741326 commented 4 years ago

大佬太强了hhhh

lovezm commented 4 years ago

不知道我32g内存 200m家宽够不够用

Billyzou0741326 commented 4 years ago

二狗大佬放心啦 性能方面我会留意的 我们学校内存比你们的小多了

Pearlulu commented 4 years ago

不知道我32g内存 200m家宽够不够用

刚才在chrome试完后,内存没回收,那个新标签页一直5G。。

Billyzou0741326 commented 4 years ago

chrome: 我们的c++不release memory

Pearlulu commented 4 years ago

image 按理说b站只播报一次上舰的消息,程序刚启动的时候像这种比较早的舰长,是怎么获取到的呢?按理说连接到房间的时候已经播报过了。

另外我干脆把新连接也按掉线率返回IP,好像更好使点,先跑两晚上试试。

Pearlulu commented 4 years ago

另外我干脆把新连接也按掉线率返回IP,好像更好使点,先跑两晚上试试。

这办法在网络很差的机器上表现不错,但是在网络好的机器上容易造成只连一个IP,虽然不影响结果,但是总觉得不太好。还得再想想怎么弄才好,总感觉我在做奇怪的无用功。

Pearlulu commented 4 years ago

另外我干脆把新连接也按掉线率返回IP,好像更好使点,先跑两晚上试试。

这办法在网络很差的机器上表现不错,但是在网络好的机器上容易造成只连一个IP,虽然不影响结果,但是总觉得不太好。还得再想想怎么弄才好,总感觉我在做奇怪的无用功。

解决了,这回应该救得不能再救了,总感觉自己智商不够用,盯着个数组看了半天才想明白。

Billyzou0741326 commented 4 years ago

大佬太肝了吧 不早点睡吗

Billyzou0741326 commented 4 years ago

image 按理说b站只播报一次上舰的消息,程序刚启动的时候像这种比较早的舰长,是怎么获取到的呢?按理说连接到房间的时候已经播报过了。

另外我干脆把新连接也按掉线率返回IP,好像更好使点,先跑两晚上试试。

比较早的舰长不是动态/静态房间检测到的 是6个分区用以检测高能的房间 通过API查询房间时测到的 动态/静态房间跳过API查询,避免莫名其妙的风控导致整个监控完全崩毁

Billyzou0741326 commented 4 years ago

没错... 有次测试触发了风控 翻车现场十分惨烈

Pearlulu commented 4 years ago

其实,就是盯着数组看了一个小时才想清楚怎么让网络好的IP平均分配连接,找了台网络好的试了下,掉线率都很低的是平均分配IP了,网络差的也比较正常,不过那个统计掉线策略还是不太好。风控不知道是不是因为短时间内对同一个IP大量连接请求。对了,顺便说下客户端好像断开后不会重连,比如路由器重拨,心跳似乎在运行,但是不抽奖了。

Billyzou0741326 commented 4 years ago

不重连的情况我需要多点信息 逻辑是重试3次后 变成每30秒重试一次 我测试过服务器重启3连 无一例外的所有client都重连上了

是完全收不到播报吗?

Pearlulu commented 4 years ago

路由器重拨试了几次,完全收不到,日志就停留在断网那个时候了,不过直播挂机经验一直在涨。 onClose不知道为什么好像没触发

Pearlulu commented 4 years ago

懒得再去那边开issue了,刚单独测试了下。 nodejs这个ws模块有点无语,服务器端如果关闭会触发close事件,但是客户端这边如果断网是不会触发close事件的,还没浏览器的ws事件方便。 https://github.com/websockets/ws#how-to-detect-and-close-broken-connections 得靠那个定期接触发的ping事件检测有没有断网。

Billyzou0741326 commented 4 years ago

是我疏忽了 测试的时候全程跑服务器的 没考虑过客户端断网的情况 服务器的ping设置的20秒间隔 我往客户端加个lastPing检测吧

Billyzou0741326 commented 4 years ago

先鸽几天 有课了

Pearlulu commented 4 years ago

先鸽几天 有课了

hhh结果又肝上了 又发现个新的现象,不同CPU连接数竟然不一样,内核越多连接数越高,同样是1核的也是性能好的连接数多。三个同时跑,一个2W连接数,一个1W5,一个1W,覆盖率也是从高到低,CPU都没跑满。

Billyzou0741326 commented 4 years ago

太强了吧 这么多服务器测 不贵吗....

Pearlulu commented 4 years ago

都是各种便宜的辣鸡VPS,专门用来瞎折腾的

Billyzou0741326 commented 4 years ago

我以前用的aws和现在跑的学校服务器都挺稳

而且线路都是海外这边的

Pearlulu commented 4 years ago

原本以为要解决网络问题很简单,切换网络好的IP就行了,结果一写起来全是坑 每次睡前懒得折腾,刚想睡觉想法就来,还好折腾网络真开心。。 感觉这次应该折腾得差不多了,各种网络情况都考虑到了,网络差的好的,高峰期和平时,新连接数多连接数少,根据实时网络质量IP负载均衡切换。就是代码写得无比难看。

Billyzou0741326 commented 4 years ago

早点睡 我也没多少时间写代码了反正 难看无所谓啊hhh逻辑清晰了代码可以后期重整的 前几天我才重写了一遍request/response那层,用的Fluent API比之前优雅不少倍。同理IP分配也可以整理的肯定

Pearlulu commented 4 years ago

把房间添加到永久监听的时候,似乎有几率会漏,比如连上两个舰,检测到第一个舰长后从动态转到静态,然后第二个就漏了。

Billyzou0741326 commented 4 years ago

快忙死了hhh 不过问题了解了 暂时想不到转静态那几秒的差时怎么处理

Billyzou0741326 commented 4 years ago

好吧想到了

Billyzou0741326 commented 4 years ago

一写就是几个小时... 结果作业都没动一下 wsl

Pearlulu commented 4 years ago

折腾这个比写作业有趣一万倍hhhhh image 最右边的是老版本,网络问题应该是不能继续优化了,几个参数也调得差不多了,再跑几天没啥问题就可以结束折腾了 剩下的就是养静态房间列表提高覆盖率了

Billyzou0741326 commented 4 years ago

静态目前的策略是慢慢收集 我这边有接近5000静态了 如果有更激进的获取方式更好hhh 动态分双核发现个问题 估计分配房间逻辑不稳 有概率两边重复监听同一个房间

动态的问题可以放一放 先攻静态吧

Pearlulu commented 4 years ago

改到500万次,爆了5G内存。。setTimeout果然不能大量使用,又学到了。还是老实把setInterval的值调小点好使。

对了,还有个误区纠正一下,nodejs的setTimeout运行完成几秒后就会完全释放内存,辣鸡chrome吃了内存就不吐出来

Billyzou0741326 commented 4 years ago

果然 NodeJS的v8引擎gc还是很不错的hhh

Pearlulu commented 4 years ago

静态目前的策略是慢慢收集 我这边有接近5000静态了 如果有更激进的获取方式更好hhh 动态分双核发现个问题 估计分配房间逻辑不稳 有概率两边重复监听同一个房间

动态的问题可以放一放 先攻静态吧

要不开播的房间舰长数大于50的都直接添加到静态里?还有就是如果长期不播的可以从列表里删掉。

Billyzou0741326 commented 4 years ago

舰长数要访问两个API才能弄到 上次我被风控就因为获取舰长数导致的23333

Pearlulu commented 4 years ago

看了下日志,最新版第一天晚上9点左右还是412了一次,之后几天没412 image 渣网络的问题跑了很多天比较稳定,不用再继续改了,可以看看怎么把这写得比较丑陋的代码整合进去了

Billyzou0741326 commented 4 years ago

这个我想了下 可以在建立连接后用net.Socket.remoteAddress获取IP存为this.ip_addr,掉线时this.emit('ip_disconnect', this.ip_adrr),controllerlistener.on('ip_disconnect', ...)记录掉线率

TypeScript的重写差不多完成一半了 重构了些部分 顺便写进ip也是可以的

yjqiang commented 4 years ago

静态房间你可以用我的那一套就行,我间隔几个月就会跑一次。数据在 1.5w 左右

Billyzou0741326 commented 4 years ago

我这个不要紧... 静态有万了 不过一直没放上来2333