1.方法概述
這個方法會返回這個對象所表示的域名/機器名
如果剛開始構(gòu)造的時候用的就是域名/機器名, 會直接返回這個
如果剛開始用的是IP來構(gòu)造這個對象, 則會用DNS反向解析來找到對應(yīng)的域名/機器名
2.問題
問題就在于DNS的反向解析, 如果解析不成功, 它會一直嘗試, 大概10秒的時間, 所以這10秒是阻塞的.
如果使用到這個方法的時候, 特別是一些網(wǎng)絡(luò)編程, 要注意考慮阻塞的情況.
3.案例
在項目中有用到spring繼承MongoDB的時候, 有遇到這個問題, 啟動的時候特別慢

image
原因就是在連接MongoDB的時候, 調(diào)用了getHostName()這個方法.
解決方案
在hosts文件中增加IP映射

image
注意這里的映射兩邊都是相同的IP, 即直接把這個IP作為域名去映射
4.總結(jié)
MongoDB的這個做法引發(fā)了我的思考:
實際上就算是不獲取主機名/域名, 直接用IP也是可以進行網(wǎng)絡(luò)連接的, 那為什么它要獲取主機名/域名, 目的無非是后面用主機名/域名去進行網(wǎng)絡(luò)連接, 那么用域名去進行網(wǎng)絡(luò)連接有什么好處嗎?
我能想到的是2點:
- 域名對于服務(wù)器的遷移來說會更加平滑, 因為IP變化不影響客戶端的配置
- 域名更適合做一些負(fù)載均衡或者CDN的策略
另外, 還有一個問題:
DNS的反向解析為什么會不成功?
這個我查了一些資料, 感覺影響的因素可能有以下幾點:
- 操作系統(tǒng)的限制(防火墻之類的)
- 本地的網(wǎng)絡(luò)配置(包括IP, 網(wǎng)關(guān), DNS等)
- 局域網(wǎng)網(wǎng)關(guān)的網(wǎng)絡(luò)配置
當(dāng)然我也只是說可能, 并沒有深入研究, 有研究的可以告知我.