DNS服務器BlackHole開發日記-起源及一點心得

###原由git

最近公司在作一個郵件系統的項目,涉及到測試對外發送的環節。開始構思是這樣:創建一個接收服務器,並將全部請求導向該服務器。這裏面就涉及到一個DNS攔截的問題。這個問題其實在開發和測試環境中很常見,可是單是綁hosts或者使用傳統DNS都不太能知足須要(不支持通配符)。github

後來調研DNS工具也煩了,因而想本身寫一個,實現簡單的功能。找到一個Java的開源項目EagleDNS看了下,把UDP鏈接模塊看了看,發現仍是比較簡單的。因而就構思着開發一個簡單的DNS服務器吧!項目託管到了github: https://github.com/code4craft/blackhole服務器


構想功能和研究協議花了一天時間,後來就急不可耐的開始編碼了。花了一個上午,作了寫死配置,一個攔截全部請求的簡單服務器,發現可以work,更加堅決了信心。框架

下午作了一些開發,參考jetty的思路,實現了handler的結構,基本代碼成型。由於不想引入Spring,寫了一堆很醜的單例。工具

晚上回家,引入了Spring,並作了一些bugfix。測試

引入了一個監控模塊wifesays,後來發現Java有個模塊JMX就是作這個事的,長見識了!編碼


###心得code

這個項目選擇至關有挑戰,基本上就是本身開發一個服務器。很重要的一個心得:從零開始開發,開始嘗試將須要的組件都本身簡單實現,後面再引入框架級的東西,能夠更好的理解J2EE世界的工具。xml

好比開始準備實現一個簡單的GlobalFactory,作Spring作的事,只是省去繁瑣的xml配置(並且印象中Spring啓動實在是太慢了)。後來發現,依賴管理是至關複雜的一塊,特別是初始化的時候的順序。後來只好引入了Spring,發現Spring自己啓動並不慢,並且使用annotation代替xml以後,也至關容易配置,重構起來也很方便,一改我在公司項目開發中,Spring又慢又笨重的印象。開發

再好比項目須要作到一個可外部管理應用的東西,當時還得意洋洋的搞了個項目叫wifesays,用的是TCP文本協議。後來才發現,Java有個模塊JMX,專門就是用來幹這事的。不過以前很難理解JMX,如今發現容易理解不少。

相關文章
相關標籤/搜索