uniqush是一款用golang寫的推送服務工具,它的介紹在這裏。官網在這裏,源碼託管在github。uniqush如今的版本是1.4.2, 在咱們國人用golang寫的代碼中,這個應該算是出類拔萃的。git
在main.go文件裏面的main()函數,直接就運行Run()函數,它會返回一個error值。在configparser.go裏面找到Run()函數的定義,裏面運行了2個goroutine。1個goroutine是rest.signalSetup()函數,在類unix平臺下,它會監控syscall.SIGTERM, os.Kill信號;在windows下,它會監控os.Kill信號。監控到信號後,它會優雅關閉服務。另外一個goroutine是rest.Run()函數。在rest.Run()函數裏面,它裏面運行了幾個http.Handle()函數。而後就查看了一下http.Handle()函數的定義,有了這片博文。
http.Handle()函數的定義是func Handle(pattern string, handler Handler),其中pattern就是相似http://localhost:port/hello中的hello字段。Handler是一個interface,它裏面聲明瞭一個ServeHTTP()函數。回過頭來看,在restapi.go文件裏面,RestAPI結構就實現了一個ServeHTTP()函數。因此從這個角度看來,uniqush是一個簡單的http應用。
剛看uniqush代碼,發現很大,並且感受亂。如今理清了思路,裏面就簡單了監控了幾個字段,而後把結果發送到客戶端。
因爲是在同窗的機器上看代碼,也沒有運行程序,等有機會編譯運行後,截個圖發上來。github