概述
本模组为 Minecraft 增加 WebSocket 支持。
由于大部分 CDN 提供商(例如 Cloudflare,华为云等)并未提供裸 TCP 的支持、DDoS 防护,或者过于昂贵,Minecraft 服务器抵抗 DDoS 攻击很容易难倒各大服主。
本模组通过为服务端和客户端增加 WebSocket 支持,服务器可以隐藏在 CDN 服务器之后,从而有效避免 DDoS 攻击。
运行环境
本 Mod 可以独立运行,支持 Forge 和 Fabric,无需其他依赖。
以后会加入 NeoForge 的支持。
服务端
当本 Mod 安装在服务器上时:
服务端可以接受玩家通过 WebSocket 接入;
在没有单独禁止的情况下,玩家仍可通过原版 TCP 直接接入;
服务端在原来 TCP 端口上监听 WebSocket 接入请求,受 server.properties 控制;
未安装本 Mod 的客户端仍可通过原版 TCP 加入安装了本 Mod 的服务端(注意:其他安装的 Mod 可能会阻止客户端的加入);
服务器可以在 WebSocket 握手之后获取客户端相关信息(例如通过 X-Forwarded-For 获取客户端真实 IP 等)。
客户端
当本 Mod 安装在客户端上时:
可以使用“ws://域名.com:端口/WebSocket路径”这种格式加入同样安装了本 Mod 的服务器;
客户端仍可使用原版的“域名.com:端口”方式加入原版服务器。
注意事项
配置
本 Mod 的服务端通过 Java 的系统属性(System Properties)进行配置,客户端没有配置。可使用 JVM 命令行的 -D 进行参数传递:
wsmc.disableVanillaTCP:默认 false。设为 true 以禁用原版 TCP 登入;
wsmc.wsmcEndpoint:默认未设置,此时客户端可以使用任意 WebSocket 路径加入服务器。设置该选项将只允许客户端使用指定的 WebSocket 路径加入服务器,大小写敏感;
wsmc.debug:默认 false。是否显示调试信息;
wsmc.dumpBytes:默认 false。是否显示 WebSocket 每一帧。需要“-Dwsmc.debug=true”。
API
对于 Mod 开发者,在服务端,可以将“net.minecraft.network.Connection”实例强制类型转换为 IConnectionEx,然后调用其 getWsHandshakeRequest() 获取 WebSocket 握手的详细信息。
例如 X-Forwarded-For 和 CF-IPCountry,分别可获得客户端真实 IP 与地区/国家代码。