工作中遇到需要PING不同服務器的IP+端口號,對於菜鳥級別的人來說,比如我,一開始肯定是從性能方面考慮,爲了不影響系統性能,只開闢一個socket從庫中取出一組IP+端口的集合,循環去ping,簡單來說就是在循環外去開啓、關閉。代碼如下
//開啓socket
Socket s = new Socket();
for (int i = 0; i < list.size(); i++) {
host = list.get(i).get("APPLICATION_IP");
port = Integer.valueOf(list.get(i).get("APPLICATION_PORT"));
SocketAddress add = new InetSocketAddress(host, port);
try {
s.connect(add, 3000);// 超時3秒
} catch (IOException e) {
//連接超時需要處理的業務邏輯
}
}
//關閉socket略
結果出現PING其中一個IP+端口異常,之後所有的IP+端口號都會ping異常。因此一個socket連接只監聽一個IP+端口號最好。因此修改代碼爲如下所示:
for (int i = 0; i < list.size(); i++) {
Socket s = new Socket();
host = list.get(i).get("APPLICATION_IP");//從數據庫中獲取的IP
port = Integer.valueOf(list.get(i).get("APPLICATION_PORT"));//端口
SocketAddress add = new InetSocketAddress(host, port);
try {
s.connect(add, 3000);// 超時3秒
} catch (IOException e) {
//異常需要處理的業務邏輯
} finally {
try {
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
其實修改後的代碼已經可以作爲一個小型的三級系統使用了,但是有時候IP+端口號不是幾個而是上百上千個,這樣的方式將不能夠再滿足系統的需要了!下篇文章將舉例說明多線程去PING
IP+端口號。
作爲初級程序員,很難將原理去剖析解釋出來!大多數只是爲工作需要,寫的不好的地方,希望大神多多指教!