GHL's Notes/

一个跨平台的Cloudflare DDNS软件

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,重复抄一遍没意义

留下一条评论

暂无评论