Finer04's Blog - Last idea
type: channel
link: https://cdn.lowb.ren/tag/Last-idea/
items: 对某手游更新资源进行本地缓存加速的笔记

对某手游更新资源进行本地缓存加速的笔记
type: item
date: 2019-05-06T21:24:00+08:00
description: 之前看阿夸联动玩 Lastidea，然后我也跟风玩了下，嗯副本贼难出货感人，用 MMORPG 模式做手游真以为自己是端游啊。然后我这破 820 在 2019 究竟能不能用呢？玩崩崩崩很难全程 60 帧了，玩玩方舟或少前这些低端画面的手游还是可以的。不可能为了个破手游而换个新手机吧，反正我平常都是呆在电脑前，那就用模拟器玩呗。 然后用模拟器愉快的打了几波副本，跟手机的 PPT 般的帧数比真的是舒服得多咯（毕竟辣鸡优化）。然后吃饭的时候想用手机玩，但tm打开手机后登录游戏就会报错，大意应该是 Token 失效，右上角的按钮复原也没用，那就只好清数据了重下数据才能登回游戏。但模拟器的体验实在是太好了，想办法自己试试解决这问题看看。 我用吊思考了一下午，试了以下几个方法 1. 备份两端的游戏数据 首先，我的手机没 root ，没有钛备份来备份数据非常麻烦，用 adb 来备份数据的话，备份出来的数据大小只有 1K，而且是没有相关内容的。就很烦，为了这破游戏又要解锁手机太浪费时间了，所以就不用这方法了 2. 学岛风狗那种正向代理缓存 留下了不会编程的眼泪。 3. 抓包修改跟手机端相同的 Token 这个还没测试过，感觉难度可能很大。而且我试过应用双开克隆了客户端再登录好像会提示错误。以后再试试 4. 将游戏反向proxy并将数据包拖到网站 这个姑且解决该问题，但是操作还是蛮多的，估计我用正向代理做的话可能没那么麻烦，可能还比反向高效得多。 # 获取游戏更新资源 首先我用个虚拟机搭个 Nginx 做反向proxy的服务器，直接用桥接模式。平台直接用宝塔的懒得折腾了。 通过 Fiddler 抓包看到这游戏的更新服务器是 `cache-lastidea.sqex-edge.jp` ，那就建个反向proxy吧，主机域名与游戏更新服务器域名一样，通过更改 `hosts` 实现就行了。 反向proxy配置如下 `try_files $uri @missing;` 是判断本地目录有没有同文件，如果没有就跳转到 missing 块反代下载，毕竟到后面我们就不依赖 nginx 自身缓存了。（为了适应以后我不维护该更新项目，如果有新的更新资源不用我自己补充，让服务器自己回源下载） ``` location / { try_files $uri @missing; } location @missing { expires 30d; proxy_pass https://cache-lastidea.sqex-edge.jp; proxy_set_header Host cache-lastidea.sqex-edge.jp; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; add_header X-Cache $upstream_cache_status; } ``` 最后使用在 Github 随便找的[自签泛域名证书](https://github.com/Fishdrowned/ssl)生成个 HTTPS 证书，解决证书问题，再把证书丢到 mumu 模拟器中就可以暂时避免证书问题了。 ## 查看 access.log 过滤游戏所有资源 傻逼游戏直接丢数据包（/Android/data/com.....）不认，非要直接重下才认数据包。使用反向的缓存有个问题就是速度比直接读本地目录慢得多，为了解决该问题得想办法把所有数据的 URL 拖出来才行，用 Fiddler 当然可以，但我也就刚开始碰这工具不是很熟练，那就直接看 nginx 的响应日志就简单了。 查看 access.log ，会有以下内容，IP、时间、请求、URL、用户设备类型会显示出来，我们就看同一小时段的日志复制出来，再用正则表达式过滤掉相同 IP/时间/设备类型/重复行 就可以了。 ``` 192.168.123.111 - - [07/May/2019:14:35:45 +0800] "HEAD /archive/dlarc/Android/20190405155346/effects_common HTTP/1.1" 200 0 "-" "Dalvik/2.1.0 (Linux; U; Android 9; ONEPLUS A3000 Build/PKQ1.181203.001)" 192.168.123.111 - - [07/May/2019:14:35:45 +0800] "GET /archive/dlarc/Android/20190405155…