DDNS全称为Dynamic DNS,是给同步动态IP的域名用的。
因为动态IP是会变化的,而记录往往不能同步。
开发动机(优点)
我为什么多此一举写一个软件?
第一是目前DDNS多数为Linux Bash Shell,或者Python
当然也有Golang的,但是Golang使用的Cloudflare API过于陈旧
Python,则是效率较低,同步效率不高,而且需要安装Python,不能做到完全无依赖
Bash Shell则局限性较大,只能在Bash下跑
因此我的目标就是,跨平台,尽可能做到轻量,小内存占用,而且完全无依赖,还要使用简单
目前比较方便达到以上目的的软件不多,虽然可能有,但是使用的库也可能较为老旧了
这萌生了我开发这个Cloudflare DDNS软件的想法
用什么语言
能达到我的目的的,在我看来,只有Golang和Rust,而且Cloudflare也提供原生(Native)API库给以上两种语言
最后我选择了Golang(因为它更简单的嘛)
局限性
功能太少(轻量必然会和功能丰富冲突,没办法,这不符合我的设计初衷)
有什么优点
Golang最优秀的莫过于Goroutine同步了,因此我在开发中也贯彻这一概念
使用Golang Channel,而且更换域名IP过程完全是异步进行,这意味着即使IP更换很频繁,这个软件也能胜任。
它可以做到秒级内检测切换,非常快速
除了这个还有以上我说的
跨平台,尽可能做到轻量,小内存占用,而且完全无依赖,还要使用简单
Golang的GC一直饱含回收不过来的诟病,但只要避免Golang的GC回收不就没有问题了?
如何避免呢?
而Golang的GC触发,是由以下造成的
&指针操作
make slice/Channel
Goroutine
Goroutine和Channel必须要用到,没有办法
其次就是指针,我开发时候尽可能的避免了出现指针,而是更多的采用了Copy
Goroutine也尽量少用,整个代码就只有一个Goroutine,一个channel,还有一个是空结构体channel(struct {}),这个不占用内存,另外就是尽量Reuse,绝不重复新建,除了没办法
然后这个程序在我的Linux上运行两天后,内存仅占用18M左右,并无大肆吃内存的情况(说明只要控制得好内存还是能少吃的。)
最后,怕各位看不见项目地址,我再发一遍
项目地址!!!!
具体说明看Github,重复抄一遍没意义
暂无评论