| 機制 | 優點 | 缺點 |
|---|---|---|
| 點對點靜態配置 | 簡單直接 | 缺乏彈性,難以擴展至大型網路 |
| 中央目錄服務 | 易管理、擴展性好 | 單點故障,抗風險能力弱 |
| 網狀傳播查詢 | 去中心化 | 網路與運算開銷大 |
| IP 多播發現 | 利用網路層特性,無需中央協調,開銷低 | 依賴網路支援多播,跨子網需路由器配置 |
MemberClient(發送宣告)與 MemberServer(接收宣告)兩個執行緒。equals/hashCode 邏輯,應用層實作具體欄位(如 host/port)。private class MemberClient extends Thread {
public void run() {
while (true) {
Message msg = factory.createSendMessage();
Reference ref = msg.createReference();
msg.writeReference(ref);
msg.sync();
byte[] data = msg.getByteArray();
DatagramPacket pkt = new DatagramPacket(data, data.length, groupAddr, port);
new MulticastSocket().send(pkt);
wait(period); // 間隔發送
}
}
}
private class MemberServer extends Thread {
public void run() {
MulticastSocket socket = new MulticastSocket(port);
socket.joinGroup(groupAddr);
while (true) {
Message msg = factory.createReceiveMessage();
socket.receive(new DatagramPacket(msg.getByteArray(), msg.getByteArray().length));
msg.sync();
if (!factory.isMine(msg)) { // 過濾自己發的
Reference ref = msg.createReference();
msg.readReference(ref);
manager.addReference(ref);
}
}
}
}
下一步挑戰:跨越防火牆、NAT 與閘道的直接通訊。