买了 150G 的套餐,月中就收到流量告急的提醒,多数人第一反应是怀疑自己下了什么大东西。我翻过 Xboard 这个开源机场面板的源码,负责记账的那一段只有几行,读完它,大部分疑问能自己解开。
账上是一行乘法
Xboard 收到服务器上报的用量以后,做的事情写在 TrafficFetchJob 里。
User::where('id', $uid)->incrementEach([
'u' => $v[0] * $this->server['rate'],
'd' => $v[1] * $this->server['rate'],
]);
u 是上传,d 是下载,两个都往账号上累加。看视频时下载占大头,可发消息、传图片、视频通话的上行部分同样在计。套餐写的 150G,说的是这两项相加以后的总数。
乘号后面的 rate 就是倍率,机场按服务器逐台设。倍率填 1,用 1GB 扣 1GB。倍率填 2,用 1GB 扣 2GB,套餐上限那个数字没变,实际能上网的流量少了一半。也可以填 0.5,那种节点用 1GB 只扣半 GB,机场常拿它来引导用户去用闲着的线路。
倍率藏在哪里,各家做法不同。有的写进节点名字,怎么读见节点名字里那串符号和缩写。有的只在用户中心的节点列表里标一列。本站收录的 28 家中,只有闪跃在官方自述里写明全套餐一倍率,其余各家的资料里都没有这一项记录,也就是说,二十七家的倍率情况在付款之前从公开资料上看不出来。下单前到节点列表翻一眼最省事。翻不到就问客服。
面板一共给了五种重置方式
重置日在 Xboard 里是套餐的一个属性,叫 reset_traffic_method,取值有五个。
| 常量 | 值 | 含义 |
|---|---|---|
RESET_TRAFFIC_FIRST_DAY_MONTH |
0 | 每月 1 号 |
RESET_TRAFFIC_MONTHLY |
1 | 按月重置 |
RESET_TRAFFIC_NEVER |
2 | 不重置 |
RESET_TRAFFIC_FIRST_DAY_YEAR |
3 | 每年 1 月 1 日 |
RESET_TRAFFIC_YEARLY |
4 | 按年重置 |
套餐也可以不选,那就跟随后台的全局设置,默认是按月。
第 0 种和第 1 种的差别最容易被忽略。选每月 1 号,全站用户在同一天清零,8 月 20 日下单的人,9 月 1 日就重置了,等于第一个月只用了十一天。选按月重置,源码取的是账号到期时间的那个「日」,20 号到期就每月 20 号重置。当月没有这一天的情况,源码会退到当月最后一天,31 号到期的账号在二月按 28 号或 29 号算。
这两种做法在账面上差得不多,落到第一个月的体感差别不小。买之前看不到机场选的是哪一种,买完在用户中心看下次重置时间,一次就知道了。
到期日在这里管两件事
第一件事很直白。时间到了服务停,不管流量还剩多少。
第二件事是上一节那个细节,按月重置和按年重置都从到期时间里取日期,也就是说,你在下单那一刻就同时把以后每个月的重置日定下来了,自己未必意识到。中途续费会把到期时间往后推,重置日跟着一起动。有人续费以后发现重置日换了一天,原因在这里,机场并没有改规则。
流量用完和时间到期是两条独立的线,哪条先到哪条先起作用。流量先用完,节点还连得上但跑不动或者直接断,得等下一个重置日或者单买一次重置。时间先到,账号停用,剩下的流量一并作废,不会退,也不会带到下一个周期。
提前用完可以单买一次重置
Xboard 的套餐价格里有一个字段叫重置流量价格,源码里写作 PRICE_TYPE_RESET_TRAFFIC。机场填了这个价,用户中心就会出现一个单独的重置按钮,买一次,已用量清零,到期时间不动。
站长资料库里记了各家的重置包价格,差得很远。一批年付小包的重置包在 15 到 18 元。另一批的重置包价格和一年的费用一模一样,年付 109 元的套餐,重置一次也要 109 元。常规的月付档,重置包价格多数就等于它的月付价,重置一次相当于多买一个月的流量,但不延长到期时间。
只有年付、没有同名月付档的那种小包,它写的流量是每月重置还是全年总量,各家写法不一样,本站不替它们下结论,也不给这类套餐算每 GB 单价。会不会重置,用户中心里的下次重置时间是最靠得住的答案。
不限时买断包走的是不重置那一档
第三种方式,不重置,对应的是市面上说的不限时流量包。一次性买断一笔流量,没有到期日,用完为止,中间不清零。
本站收录的 28 家里有 12 家卖这类包。每 GB 单价的中位数是 1 元,而最低月付档的单价中位数是 0.167 元。贵出来的部分买的是时间,流量放着不会过期,机场还在就还能用。每月只用几 G 的人,或者想留一份备用订阅应急的人,这笔账算得过来。每个月都要跑满一百多 G 的人,买它不合算,具体每家的价格可以在榜单里筛。
手边能查的三个数
第一个数在订阅响应里。客户端每次去下载节点列表,服务器会在响应头里带一行 Subscription-Userinfo,写着已用上传、已用下载、总流量和到期时间。Stash 的官方文档记了这个格式,Xboard 也是这么输出的。客户端首页显示的剩余流量和到期日,就是从这一行读出来的。
第二个数在用户中心。下次重置时间、已用流量、当前套餐三项都在那里,和客户端对不上的时候以用户中心为准,客户端读到的是上一次更新订阅时的快照。
第三个数藏在节点列表里。不少机场会往订阅里塞几行不是节点的东西,名字写着剩余流量多少 GB、套餐到期某年某月某日、距离下次重置还剩几天。订阅转换工具认得这套写法,subconverter 的表情映射表第一条规则就在匹配流量、时间、过期这些字。它们在客户端里长得像节点,点了连不上,作用只是让你在切换节点时顺手看一眼。
流量记账这件事到这里就讲完了。用得比预想快的原因通常有三个,倍率不是 1、上传被忘掉了、重置日和自己以为的不是同一天。三个都排除了还是不对,到机场连不上或者掉线的排查顺序里接着往下查。