惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
DataBreaches.Net
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
IT之家
IT之家
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
月光博客
月光博客
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
腾讯CDC
B
Blog RSS Feed
博客园 - Franky
爱范儿
爱范儿

西行妖

T618冷门平板刷机从入门到理赔 12700h es新all in Boom折腾记录 Kde6 Electron程序在wayland模式下无法运行终极解决方案 蜗牛星际NAS再次折腾记录 2023年度总结 CS61B最后的总结:比较排序与基数排序 工程机,我劝你别买 为thinkbook14p G3更换高刷屏幕 专有名词笔记 时间轴 谷歌域名即将被收购,如何薅到最后一波羊毛 人在囧途——记录我的日本之行 记一次衣服被子被偷的离谱经历 关于本站迁移的公告 java的某些常用特性 python3将对象作为线程使用 在Chromebook上使用Windows是什么体验?记录我到目前为止用过的Chromebook Chromebook刷bios解除企业锁折腾记录 Vue3的computed计算属性传参 在Docker容器中运行服务 将操作系统从Windows转向Linux [预告]固态硬盘太贵?试试看自己做一个吧 A卡深度学习服务器折腾&踩坑记 Ai绘画体验——利用校徽生成对应虚拟形象 AutoWhitelist诈尸更新dev&新的未来计划 它很好,但对我来说不够好——关于华硕无双15.6 [推广]蓝易云暑期大采购活动 Potplayer+SVP4插帧看番体验——24帧日漫轻松提升至60帧 AList搭建教程&网盘迁移至AList公告 还是v2ex大神多,记一次遇到bug被大佬拯救
Autowhitelist介绍&我对mc白名单的研究
zsx · 2022-07-26 · via 西行妖

本文开始之前,先来说说autowhitelist这个项目:这是一个自动添加mc服务器白名单的程序,腐竹可以出题让玩家作答,玩家达到分数线后将自动添加白名单,免去中间的人工审核和添加。当然小作文式题目还是得人工审核

如果想要试用当小白鼠的话,可以看看项目开源地址,里面的release页面有编译好的版本可以下载,下载后再简单设置一下就可以用了。然而题目还是要自己写

我写这个项目的契机是什么呢?其实理由并不高大上,只不过是我懒得人工审核果然懒惰是推动科技发展的动力。虽然这个插件的原理和理由一样,都没有什么高大上的内容,但我还是研究了好一阵子才研究出了完整的前后端程序。那么下面就来聊聊整个开发过程吧。

首先是前后端的通信方式。我在一开始时是想用websocket长链接通信,但由于没有相关基础,所以研究了一段时间都没研究出来。于是我便转向了http轮询的方式。但使用这种方式,又遇到了另一个问题:消息队列。由于轮询无法及时向客户端推送消息,因此需要做一个队列缓存消息,当客户端轮询时再读取队列并推送。然而就是这个问题无法解决,无论用什么方案都无法保证稳定性,以及轮询需要消耗数倍的资源来运行,因此我便放弃了这种方式,转为socketio。

虽然说socketio是websocket的封装库,理论上使用方法是比纯websocket简单的,但在使用过程中我还是遇到了一个问题,这个问题我用了接近两天都没能解决(上一篇文章说的就是这件事)。最后还是在v2ex大神的帮助下解决了。这个问题似乎是开发过程中最困难的那个,解决完这个问题后开发进度一日千里,不久后便完成了整个项目并没有

连接方式确定了,那么接下要确定就是前后端框架了。后端使用的自然是flask以及flask-socketio,毕竟这是我最熟悉的web框架。但在客户端方面我却犯了难。如果只需要接收消息,那么只需要一个socketio库就能搞定,然而问题正是出在如何添加白名单这里。

由于我服很早就开始使用mcdreforged,而我现在只会python,因此我便果断选择了mcdreforged进行开发。但在开发时,大麻烦出现了:mcdr插件中的代码是默认同步进行的,也就是说必须执行完插件中的代码,才会接着进行下一步操作。然而因为我的插件需要保持长连接,mcdr等不到我的代码执行完毕,所以线程就会无限堵塞,无法执行其他指令。虽然mcdr自带了一个多线程功能,但这个多线程功能又及其不完善,无法关闭线程,也就是说如果插件重启了,会同时有两个线程连接后端。权衡利弊之下,我打算放弃mcdr平台,另辟蹊径:直接操作whitelist.json。

如果是直接操作的话,就可以不用考虑多线程之类的操作,也无需担心线程堵塞了。于是我便在这条路上越走越远,最终写出了第一个可以正常使用的产品。

在刚写完没多久,我便后悔了:我根本没有考虑过给盗版服使用。由于whitelist.json需要同时存储玩家id和uuid,因此我在程序中写死了从mojang官方获取uuid的方法。虽然说盗版服的uuid是可以随便乱写的,直接获取正版uuid也是可以使用的,但就怕有的盗版玩家id没有对应的正版uuid。看来外置程序并不是万能的,还是内置插件的方案比较稳妥。

虽然我不会java,但万幸的是,我找到了愿意合作的人。相信不久后,fabric版和spigot版就能面世了。希望这个项目能越做越好,毕竟这是第一个我发起的真正有研究方向和前景的项目。

2022.7.26