Open wy16W2pIilK1xgqN opened 2 years ago
可以考虑支持dat格式,但这需要我手动去逆向一下dat文件是如何编码的。
自动重新载入可能需要重新设计并发模型。目前数据文件是在init阶段只创建一次的,如果需要自动重载会有较大的performance penalty以及更大的内存占用。我暂时没想到更好的办法
谢谢回复。 编程的我不懂,应该不需要逆向,v2 项目应该有开源Go代码的,数据编码没啥秘密, 只是如何 用Rust 实现 就需要开发者费心了。 有类似的基于GO的DNS项目,也许能带来一些灵感。 https://github.com/IrineSistiana/mosdns
对于自动载入,我的想法是并不需要保证实时性和内存占用,主要是要避免用户干预。 可以搞成类似于自动重启,只要保留缓存就行了。
大体逻辑是,dcompass 周期检查文件,发现文件变动后, 拉起一个新的实例(或者线程、进程之类的,术语我不太懂)载入数据。 新实例完成启动前,旧的继续处理,拉起完成后新数据流向新实例。
然后在清理旧的实例就行了,过程中主要是要保证解析缓存不丢失,就行了。
以后的优化就是 尽量传递已有数据,减少读取文件。
这么做最多也就内存占用短时间内翻倍罢了。 我想一般用户是能接受的。
@LEXUGE 想试着实现一下 v2ray 数据支持,请问项目里域名匹配相关的代码有那些
可以参考maxmind读取实现的相关代码。但是鉴于v2ray格式包含域名和IP,所以可能还需要加入dmatcher 之类的。
国内用户很多需要使用基于域名和IP的数据分流,用户自行维护这些数据比较麻烦。
v2ray项目的子项目 ,维护了 域名和IP 的分类数据,使用 V2Ray dat 格式文件。 该文件维护良好,被众多项目和用户使用。 希望开发者能完整支持。
另外,对于软件用的各种数据文件,希望能够检查变化,自动重新载入。 这样就能避免修改数据后重启软件了。
项目链接 https://github.com/v2fly/domain-list-community https://github.com/Loyalsoldier/geoip https://github.com/Loyalsoldier/v2ray-rules-dat