資源發現(下篇)

2021-10-07 06:26:31 字數 2692 閱讀 6947

承接上篇:資源註冊中心要實現對資源持有者的健康檢查,那麼他必須有所有已提交過註冊的資源持有者節點位址。

此處的健康檢查是採用定時的方式,去連線請求 資源持有者節點。

下面是自己做的乙個定時器小工具:

public abstract class didadida implements runnable

public didadida(long delay)

public long getdelay()

public abstract void doing();

//啟動定時器

public void startup()

goon = true;

new thread(this, "定時器").start(); }

//關閉定時器

public void stop()

goon = false; }

@override

public void run() catch (interruptedexception e)

}} }

//開啟執行緒執行doing()方法

private class innerwoker implements runnable

@override

public void run() }}

說一下nodepool的資料結構:一對一結構。

concurrenthashmap鍵: defaultnetnode物件的hashcode    值:defaultnetnode物件

nodepool**如下:

public class nodepool 

public static void stopscannode()

public static void add(defaultnetnode node)

nodepool.put(key, new resourceholdernode(node)); }

public static void remove(defaultnetnode node) }

static class scantimer extends didadida

public scantimer(long delay)

@override

public void doing()

iteratornodelist = nodepool.values().iterator();

while(nodelist.hasnext()) catch (exception e)

}}

}}

要想成功進行健康檢測,那麼資源註冊中心必須能夠主動連線資源持有者,即要利用rmiclient。此處的健康監測是在nodepool中進行的。故nodepool中儲存的節點用defaultnetnode(只有ip和port)是不行的。而是需要乙個能夠實在進行通訊的網路節點,故在填充nodepool的時候儲存的應該是resourceholdernode。

resourceholdernode:

public class resourceholdernode extends defaultnetnode 

//檢測健康情況

public boolean isactive() throws exception

}

接下來是真正的資源持有者resourceholder:

public class resourceholder extends resourcer 

public resourceholder(string ip, int port)

/*** 執行遠端方法 註冊資源

*/public void registry(resourceinfo resourceinfo)

public void logout(resourceinfo resourceinfo)

public void shutdown()

}

對於資源請求者 其實它的實現很簡單,他只需要向資源註冊中心傳送 「獲取某資源對應的資源持有者集合」即可。

resourcerequester:

public class resourcerequester extends resourcer

public listgetaddresslist(resourceinfo resourceinfo)

}

至此基本上就完成了整個「資源發現工具」的所有內容。

測試是必要的。利用兩個測試類:

testholder:

public class testholder 

}

testrequester:

public class testrequester else 

} }}

先執行testholder可以看到輸出結果:

再執行testrequester結果:

MockServer的測試思想與實現(下篇)

mockserver的技術實現 目前,筆者已經用python實現了乙個基於socket介面的mock server並在測試中進行了一定的應用,實現中利用了一些python的語言特性 一點rpc技術和一點dsl的技巧。乙個case 下面先看乙個實際的case,case加入了許額外的注釋,以解釋這段 的...

CoAP學習筆記 CoAP資源發現

coap協議專門為m2m通訊設計 裝置間通訊 在裝置通訊過程中很少會有人的干預。為了實現在沒有人干預的情況下正常工作,coap提供了資源發現機制。這就是的客戶端理解哪些uri是被支援,並且客戶端可以獲知該uri的具體含義。coap協議建議,伺服器端應該支援乙個 well known core,該ur...

FTP資源 發現乙個ArcGIS相關的FTP。

用谷歌 在搜尋 arcgisenginert的時候,發現了乙個站點 目錄下有 esri version 10.0 13 6 17 下午1 08 00 esri version 10.1 12 10 3 上午12 00 00 esri version 9.3.1 13 6 17 下午1 12 00 p...