Yoshino:轻量级的 Minecraft 皮肤站

Author Avatar
黎明余光 2 月 10 日

自己挖的坑说什么都要填完系列

回顾

大概在 2017.8.7,我发布了 辣鸡的 dawn-skin-server,由于代码烂到我都不想看的级别,所以成功地在一个月内弃坑,目前它已作为黑历史封存(

开坑

我花了一周时间,使用 XPHP 1.0.6 将所有代码以及前端重写了一遍,并更名为 Yoshino,性能以及易用性都有了相当大的提升
你问我为什么用这个 框架Framework?因为我至少是个挂名开发者啊(

Features (bugs)

更棒的 AJAX

依靠现学一点辣鸡 JavaScript 和 MDU.JQ 的文档把大部分操作使用 AJAX 实现了,所以现在有一堆 bug 和极不优雅的代码

将皮肤存储至数据库

这是个脑洞,方便没有写入权限的 WebHosting 之类的,原理就是简单地将皮肤 base64 后扔进数据库,调用时解码一下

优化的材质哈希算法

本来是打算照着 authlib-injector 的标准写的,结果发现 智商太低 看不懂这文档,然后就瞎鸡儿实现了一个算法

创建一个字符串,写入材质的宽和高,然后逐列遍历像素的 RGB 值,追加到字符串后面,返回字符串的 SHA-256
PHP 实现示例

function skinHash($tmp_name) {
    $skin = ImageCreateFromPng($tmp_name);
    list($width, $height) = getimagesize($tmp_name);
    $string = "";
    $string .= $width . $height;
    for ($w = 0; $w < $width; $w++) {
        for ($h = 0; $h < $height; $h++) {
        $rgb = ImageColorAt($skin, $w, $h);
        $i["r"] = ($rgb >> 16) & 0xFF;
        $i["g"] = ($rgb >> 8) & 0xFF;
        $i["b"] = $rgb & 0xFF;
        $string .= $i["r"] . $i["g"] . $i["b"];
        }
    }
    return hash("sha256", $string);
}

大幅改进的性能

测试于腾讯云广州四区 1C1G 小鸡,服务器环境:

  • CentOS 7.4
  • PHP 7.1.9 + MySQL 5.5
  • 开启 Opcache

Loader.io 压测 150 并发的情况下 CPU 占用不到 70%,(相较于 Blessing Skin Server)可以说是相当高性能了(逃

最后

DEMO:https://skin.lim-light.com
你猜猜这坑多久能填完?
(头图从 Wallper Engine 找的,侵删)

    洛汐
    洛汐   2018-02-16, 14:45

    为什么我的 不能评论 用的这个主题

    xtlsoft
    xtlsoft  2018-02-12, 16:59

    (虽然说修改过程出了点问题,都以为是 XPHP 和 Idiorm 的问题,结果是自己写错了。。。)

      黎明余光
      黎明余光   2018-02-12, 17:00

      谁叫 Idiorm 的主键这么坑...

    小屁卡
    小屁卡   2018-02-11, 17:22

    哇余光大佬好强,10 秒就修好

    小屁卡
    小屁卡   2018-02-11, 17:19

    学生机吗

      黎明余光
      黎明余光   2018-02-11, 21:11

      采购季买的,229/yr,IO 低得可怜(

        小屁卡
        小屁卡   2018-02-12, 14:21

        好贵。。我用的是学生机,IO 比阿里云的同配好一点,一年 12

    GPlane
    GPlane  2018-02-10, 22:19

    我承认 BS 是挺肥的