Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] 希望能支持 v2ray 项目的数据文件。 #95

Open
wy16W2pIilK1xgqN opened this issue Sep 27, 2022 · 4 comments
Open

[FEAT] 希望能支持 v2ray 项目的数据文件。 #95

wy16W2pIilK1xgqN opened this issue Sep 27, 2022 · 4 comments
Labels
enhancement New feature or request

Comments

@wy16W2pIilK1xgqN
Copy link

wy16W2pIilK1xgqN commented Sep 27, 2022

国内用户很多需要使用基于域名和IP的数据分流,用户自行维护这些数据比较麻烦。

v2ray项目的子项目 ,维护了 域名和IP 的分类数据,使用 V2Ray dat 格式文件。
该文件维护良好,被众多项目和用户使用。
希望开发者能完整支持。

另外,对于软件用的各种数据文件,希望能够检查变化,自动重新载入。
这样就能避免修改数据后重启软件了。

项目链接
https://github.com/v2fly/domain-list-community
https://github.com/Loyalsoldier/geoip
https://github.com/Loyalsoldier/v2ray-rules-dat

@wy16W2pIilK1xgqN wy16W2pIilK1xgqN added the enhancement New feature or request label Sep 27, 2022
@LEXUGE
Copy link
Collaborator

LEXUGE commented Sep 27, 2022

可以考虑支持dat格式,但这需要我手动去逆向一下dat文件是如何编码的。

自动重新载入可能需要重新设计并发模型。目前数据文件是在init阶段只创建一次的,如果需要自动重载会有较大的performance penalty以及更大的内存占用。我暂时没想到更好的办法

@wy16W2pIilK1xgqN
Copy link
Author

wy16W2pIilK1xgqN commented Sep 27, 2022

谢谢回复。
编程的我不懂,应该不需要逆向,v2 项目应该有开源Go代码的,数据编码没啥秘密,
只是如何 用Rust 实现 就需要开发者费心了。
有类似的基于GO的DNS项目,也许能带来一些灵感。
https://github.com/IrineSistiana/mosdns

对于自动载入,我的想法是并不需要保证实时性和内存占用,主要是要避免用户干预。
可以搞成类似于自动重启,只要保留缓存就行了。

大体逻辑是,dcompass 周期检查文件,发现文件变动后,
拉起一个新的实例(或者线程、进程之类的,术语我不太懂)载入数据。
新实例完成启动前,旧的继续处理,拉起完成后新数据流向新实例。

然后在清理旧的实例就行了,过程中主要是要保证解析缓存不丢失,就行了。

以后的优化就是 尽量传递已有数据,减少读取文件。

这么做最多也就内存占用短时间内翻倍罢了。
我想一般用户是能接受的。

@snylonue
Copy link

@LEXUGE 想试着实现一下 v2ray 数据支持,请问项目里域名匹配相关的代码有那些

@LEXUGE
Copy link
Collaborator

LEXUGE commented Feb 26, 2023

可以参考maxmind读取实现的相关代码。但是鉴于v2ray格式包含域名和IP,所以可能还需要加入dmatcher 之类的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants