1
KCheshireCat 2017-04-27 16:27:03 +08:00 via iPhone
造轮子辛苦,除去自己学习,这些特性 dingo 这个项目都有了。
然后走梯子的域名查询默认是由服务端直接查询 8.8.8.8 的,对于小飞机是这样的。 再然后,如果是家用,异步 io 是不是真的有用,我保留意见,我的一个轮子 dnspod-httpdns-proxy 就是简单的阻塞式,效率也没太差。 |
2
leavic OP @KCheshireCat
最近看了 Fluent Python,里面提到的 concurent 并发库的时候提到,其实 standard library 中的 io 阻塞函数都是会自动释放 GIL 的,所以并发的方式在 IO 上一点都不会影响性能,只是线程多了一点而已,asyncio 在 io 速度上并无优势。 到 GoogleDNS 的 TCP 查询还是比较慢的,我这里基本都在 500ms 以上,如果多一点查询,这个阻塞恐怕就有点不能接受了,dnspod 有网络速度上的优势,小量的查询确实不需要太担心阻塞的问题。 不过,cache 比啥都更提高效率。 |
3
maojy1989 2017-04-28 09:40:58 +08:00
感谢楼主的贡献,我一直想找一个类似 PRCDNS 但支持 UDP 的软件,终于找到了,看了下 README 里面写的,楼主只考虑了把这个部署在路由器上,所以没有添加 Socks 支持,我想建议楼主加上这个功能不知道可不可以,有时候需要无污染的 DNS 也不一定是要配合梯子用,有的运营商对国内的域名也存在 DNS 劫持,我可能需要带着笔记本去不同的地方用不同的网络,但是不可能走哪都带着路由器,所以如果要把这个软件装在电脑上,添加 Socks 支持肯定会更加方便使用的
|
4
leavic OP @maojy1989
这东西不可能脱离梯子直接工作的,因为国内网络根本无法直接访问 dns.google.com,而如果你机器上有 shadowsocks 之类的代理,抗 DNS 污染似乎根本不需要自己来做。 aiohttp 好像只支持 http 代理,这种代理好像都死得差不多了吧,真要用的话,把 49 行改一下自己添加一个 proxy 参数就行了: async with session.get(url, headers=self.headers) as resp: async with session.get(url, headers=self.headers,proxy=YOUR_HTTP_PROXY) as resp: 这个支持很鸡肋,但改动很小,我会做进去,但你自己改代码来得更快。 |
6
leavic OP |
7
maojy1989 2017-04-28 17:25:46 +08:00
@leavic #6 试了一下,可以用了,不过不知道为什么有时候会连接 dns.google.com 失败,第一次查询还很慢,查询时间在 300ms - 3000+ms 中间,配合 dnsmasq 的缓存问题应该不大
|
9
maojy1989 2017-05-03 13:37:25 +08:00
|
11
leavic OP 已经修复了,你可以 pip 更新试一下,0.0.9 版本。
|