Biliroku的更新——七牛CDN的缓存真顽固
11号那天收到反馈说,B站有些房间号无法录制,但是基本不影响使用。
于是我根据它报告的房间号看了下情况——115。
三位数房间号?B站居然放出了3位数房间号?熟悉B站生放送的人可能知道,B站自开始直播这个功能,房间号就一直是四位数。
于是我打开了这人的直播间——发现居然是陆夫人,我记得陆夫人的直播间是1016啊。
于是打开开发者工具看了看抓包信息,感觉明白了一切。
这就是B站的直播短号嘛。。。
访问 http://live.bilibili.com/1016 的时候,服务器会发一个302定向到 http://live.bilibili.com/115。
HTML内容里面有一句javascript定义了真实的房间号。
因为我的程序直接是信任这个房间号就是真实的,然后直接访问api去找直播数据流下载。
所以就会出现短号找不到的情况。
于是新版更新就是加了一次HTTP请求,先请求主页得到真实房间号,再请求API去找直播数据流。
我花了1个小时修改程序。
花了20个小时处理七牛的缓存。
当我程序改完传到放在七牛的自动更新服务器上,然后我打开自己的正式版程序。
发现没更新?
然后一看,页面根本就没有变嘛。
才发现七牛根本就没刷新缓存。已经更新到1.2.2版本了,而页面上还赫然写着1.2.1
七牛的CDN太顽固了,后台清除多次都无效,不知道缓存机制是个什么样的策略。
后来我忍无可忍,给七牛提交了工单,让他们帮我刷缓存。
于是12日下午17:00缓存终于刷掉了,我自己终于收到了推送。
后来七牛的人告诉我说,
像我这样的用七牛做更新服务器的人很常见,他建议我这么使用——
下载qrsctl命令行管理工具
登录:
1 | ./qrsctl login <User> <Passwd> |
设置302跳转
1 | ./qrsctl redirect <bucket> 文件名 http://域名/地址 302 |
这样由于302不会被缓存,每次上传不同的文件名,然后用这个设置新的跳转,就可以解决这个缓存顽固的问题了。