这几天project cosette还是没什么进度,但我至少买了个新桌子🤔
理论上来说,我的旧茶几是130*70的,所以我买了个140*70的桌子,这样也许我可以将茶几直接塞进桌子下面🤔而实际上它那个140的长度只不过是桌面的长度,但桌腿及其支撑结构的长度要比这个值至少小10cm,所以最后我的茶几仍然没法塞进桌子下面去,只能放一边了(恼🤔
无论如何,我现在至少有桌子用了,也许我的沙发还是显得低了些,但这不是什么非常难解决的问题,比如我可以去买个靠垫或者诸如此类的玩意(确信🤔那么,也许接下来我可以考虑实现一部分project cosette了(🤔
反正cuties impact目前版本的bp已经结束了,接下来两天或者三天都不太可能有什么活动🤔我要不把那篇什么genshin frontier给撸完?但我已经提及此事114514回了,估计这次它也大概率鸽(恼🤔
thonksette
我寻思project cosette有没有什么可能,让我能找到现成的轮子,比如什么项目管理系统啥的,可以随便魔改下就能用的那种🤔其实我到现在甚至还没完成它最关键的技术选型,比如用什么方法来启动github actions runner🤔用什么方法来管理这些runner🤔
另外我也许知道如何向这些runners发消息,但不清楚这些runners如何向cosette chan发消息,最起码有三个消息需要发送到cosette chan:
- runner上线的消息
- runner执行完一个任务后返回的discord drive/guilded drive链接
- 如果可能的话,我想把runner执行任务时往stdout打出的任何东西通过某种申必管道传送到cosette chan里
后者当然走的是特殊申必通道,但前两个呢?有没有可能通过我之前熟悉(大嘘)的cgi-bin来实现?比如:
- cosette.py执行了启动八个runner的申必命令(通过对github网页版抓包这种极其生草的方式),但给每个runner的启动命令里加了不同的参数(比如
http://[insert.cosette.chan.domain.name.here]/cgi-bin/wiebitte01.sh
到wiebitte08.sh
- 这些sh文件的内容大致是runner启动好后先向某个申必接口(比如
http://[insert.cosette.chan.domain.name.here]/cgi-bin/report.sh
)发送表示自己上线的申必消息,比如线程id|ONLINE
,然后每固定间隔curl一个申必网址(比如http://[insert.cosette.chan.domain.name.here]/cgi-bin/task01.sh
),如果接收到的内容是个sh文件就去执行sh文件的内容,如果是别的控制命令(比如#TERMINATE
或者#SETINVENTAL|2
)就去按照里面的东西来做某些事,除非收到的是#TERMINATE
不然无限循环 - 与此同时,cosette.py需要有能力处理之前那个申必接口(比如
http://[insert.cosette.chan.domain.name.here]/cgi-bin/report.sh
)接受到的信息,并以此来调整它的运行状态,比如检测到它被输入了一个1|ONLINE
之后,意思就是1号runner已经上线了,接下来的程序就能给1号runner分配任务了,比如给http://[insert.cosette.chan.domain.name.here]/cgi-bin/task01.sh
塞入它需要跑的sh文件🤔或者在收到1|started
之后开始对某个任务计时,在收到1|completed|https://xxxxxxxxxxxxxxxxxx
之后对某个任务停止计时并将处理好的链接存进数据库的相应项里🤔
问题就在第三步如何设计?🤔它肯定是一个事件驱动的玩意,事件是有runner向cosette chan发送消息,比如发送online或者发送discord drive链接啥的🤔那么,python有相应的机制吗?🤔我是不是可以用python自带的http服务器来处理这部分玩意,这样它自然可以直接将runner给它发送消息这件事处理成一个事件?python有这玩意吗?🤔
如果它没有,而且我开始使用了cgi-bin,那么它又该怎样处理runner发来的消息?🤔我是不是可以在report.sh
里搞一个文本文档来存runner发送来的任意消息,而cosette chan也读取这个文件,只不过它读取一行处理完一行就删掉一行?🤔这样会不会带来什么申必多线程读写冲突?而且这个处理消息的过程和cosette chan主要任务是什么关系,多线程的关系还是单线程的关系?🤔
这就是我接下来可能需要解决的玩意(确信🤔