Xndroid icon indicating copy to clipboard operation
Xndroid copied to clipboard

多倍流量问题

Open subtank opened this issue 7 years ago • 52 comments

那个多倍流量实际只有百分之十的下载问题,手机型号:小米5sp rr-OS N Xndroid版本1.10 xx-net版本:任意版本都是一样情况 经过用手机流量的计费测试后发现真的是跑的多倍流量。下载50MB的文件跑到将近300MB。并不是上一个issue #103 说的回环导致的重复显示。 目前还没找到合适的方式来监控手机流量出入情况。求指导任意一个方式。

subtank avatar Jun 11 '18 07:06 subtank

那个多倍流量实际只有百分之十的下载问题

那个多倍流量实际上是只有百分之十的情况下才会发生的下载问题

上面这句是这个意思吗?

SeaHOH avatar Jun 11 '18 08:06 SeaHOH

是实际跑的流量是下载流量的十分之一。

subtank avatar Jun 11 '18 11:06 subtank

之前讨论过的啊。显示是1.5-3MB,实际上只有150K-300K的下载速度。除了谷歌下载是显示的是300K外,其余节点的速度监控都是显示的是1.5-3M。我最近直接用的流量,运营商计费是按照1.5-3MB下载速度最后产生的数据总量计费的。

subtank avatar Jun 11 '18 11:06 subtank

之前说的是三四分之一,还以为你说的不是这个意思。 有点想不明白,你试过别的手机没有?

SeaHOH avatar Jun 11 '18 15:06 SeaHOH

​之前讨论的帖子: https://github.com/XndroidDev/Xndroid/issues/103#issuecomment-388322910

有提到如何抓包分析

xxnet avatar Jun 12 '18 07:06 xxnet

已观察到该问题,时间充裕后再尝试解决

XndroidDev avatar Jun 12 '18 12:06 XndroidDev

​这个问题可能从fqrouter中就存在,以前用fqrouter时就遇到过,一启动fqrouter流量就飙上来 对跑移动流量的人来说,消耗消耗很大

xxnet avatar Jun 13 '18 08:06 xxnet

@subtank 测试发现,所谓的多倍流量问题只在部分浏览器(国产浏览器)中存在, 使用基于系统webview的浏览器以及chrome不存在此问题. 初步猜测可能是是国产浏览器为加速网络资源加载,在网络延迟加大的情况下,会并发重复网络请求.

XndroidDev avatar Jun 16 '18 06:06 XndroidDev

@XndroidDev 我谷歌play下载多倍计费什么情况?

subtank avatar Jun 16 '18 06:06 subtank

用代理我肯定不是用来上网,肯定是跨区玩游戏啊

subtank avatar Jun 16 '18 06:06 subtank

GooglePlay 没有测试, 可能也是因为重复请求造成的吧

XndroidDev avatar Jun 16 '18 06:06 XndroidDev

有解决办法么?

subtank avatar Jun 16 '18 06:06 subtank

如果是由于大网络延时造成的应用重复网络请求,解决办法就是更换更快的梯子

XndroidDev avatar Jun 16 '18 06:06 XndroidDev

因为TCP超时重传​带来的流量比例都很小。 最好的方法还是抓包分析

xxnet avatar Jun 16 '18 23:06 xxnet

某些场景下,当应用断开了之前的http连接后, fqrouter的http代理仍然会继续接收完完整的http response, 在get较大文件时比较明显

XndroidDev avatar Jun 19 '18 12:06 XndroidDev

应该检查能否写入,不能时就报错停止。

SeaHOH avatar Jun 19 '18 12:06 SeaHOH

fqrouter中有做异常处理, 为什么会这样还不清楚 https://github.com/XndroidDev/Xndroid/blob/8fde138f2ebab7e793594d591fa7097e5c0adb02/fqrouter/manager/fqsocks/gateways/proxy_client.py#L138

XndroidDev avatar Jun 19 '18 12:06 XndroidDev

~套接字不会报错,~文件才会。 ~可以检查_closed属性。~


首次写入不会,再次会报错。

SeaHOH avatar Jun 19 '18 13:06 SeaHOH

我在循环recv时加了打印, 似乎并不是这里的问题

XndroidDev avatar Jun 19 '18 14:06 XndroidDev

使用套接字的单向转发都应该检查下,双向的就没问题。

SeaHOH avatar Jun 19 '18 14:06 SeaHOH

或者可以重写套接字的所有 send 方法,添加关闭检查并抛出异常。

SeaHOH avatar Jun 19 '18 14:06 SeaHOH

@SeaHOH 昨天的那个问题是因为服务器错误地将content_type 设为 'text/html', 导致fqrouter尝试一次性接收完响应.

https://github.com/XndroidDev/Xndroid/blob/8fde138f2ebab7e793594d591fa7097e5c0adb02/fqrouter/manager/fqsocks/proxies/http_try.py#L428

但这个并不是主要问题, 我在手机上通过fqrouter的http代理使用PC上的XX-Net, 使用国产手机浏览器(如夸克,UC) 播放youtube时, 手机上的实时网速正常; 而PC上的下载网速会不正常的变快. 具体观察PC上XX-Net的python进程, 发现其下载流量为上传流量的3倍左右, 并且在频繁快进或快退播放时其比值会加大. 而使用chrome或基于系统webview的手机浏览器则未发现此问题. 因此主要问题很可能在XX-Net上.

XndroidDev avatar Jun 20 '18 06:06 XndroidDev

@XndroidDev 我到现在都没搞懂怎么设置让fqrouter用PC上面的XX

subtank avatar Jun 20 '18 06:06 subtank

@xxnet @SeaHOH 当应用断开连接时, XX-Net的RangeFetch仍然会持续一段时间. 且在应用多线程get时, XX-Net的下载流量看上去是"突发性"的(持续时间较短, 且下载网速很快), 而将响应数据传给应用时的流量则是持续性的(上传网速较慢, 且持续时间较长). 在国产浏览器中, 播放时会多线程get, 如果播放顺利且无快进快退, 则XX-Net的(从Google服务器的)下载流量与(将响应传给应用的)上传流量基本一致. 但如果播放时快进或快退或播放出现问题, 则XX-Net的下载流量会数倍于上传流量.

XndroidDev avatar Jun 20 '18 08:06 XndroidDev

新版浏览器播放都是分段,不会激活 RangeFetch,先前没注意到。 不过 RangeFetch 本意就是提前下载后面的数据,所有只能调整参数减少不必要的下载,但还是会超出已接收数据。

SeaHOH avatar Jun 20 '18 08:06 SeaHOH

我在手机浏览器上都发现用到了RangeFetch

XndroidDev avatar Jun 20 '18 09:06 XndroidDev

@subtank 在fqrouter代理列表中将http代理ip改为电脑ip即可

XndroidDev avatar Jun 20 '18 09:06 XndroidDev

XX-Net 本身的默认配置不可能改小太多,你看参数的调整在哪里做比较好?

SeaHOH avatar Jun 20 '18 12:06 SeaHOH

@XndroidDev 只能走http代理么?不能用X-Tunnel的sock5?

subtank avatar Jun 21 '18 06:06 subtank

@subtank 可以

XndroidDev avatar Jun 21 '18 08:06 XndroidDev