これは、Bonjour を使用し、Java で記述された単純なサーバー アプリケーションです。コードの主要部分は次のとおりです。
public class ServiceAnnouncer implements IServiceAnnouncer, RegisterListener {
private DNSSDRegistration serviceRecord;
private boolean registered;
public boolean isRegistered(){
return registered;
}
public void registerService() {
try {
serviceRecord = DNSSD.register(0,0,null,"_killerapp._tcp", null,null,1234,null,this);
} catch (DNSSDException e) {
// error handling here
}
}
public void unregisterService(){
serviceRecord.stop();
registered = false;
}
public void serviceRegistered(DNSSDRegistration registration, int flags,String serviceName, String regType, String domain){
registered = true;
}
public void operationFailed(DNSSDService registration, int error){
// do error handling here if you want to.
}
}
以下のように理解しています。「registerService」メソッドを呼び出すサービスの登録を試みることができます。このメソッドは、「DNSSD.register」メソッドを呼び出します。「DNSSD.register」はサービスを登録しようとしますが、通常、サービスは「登録に成功しました」と「登録に失敗しました」という 2 つの結果になる可能性があります。どちらの場合も、「DNSSD.register」は、最後の引数として DNSSD.register に与えられたオブジェクトの対応するメソッド (「serviceRegistered」または「operationFailed」のいずれか) を呼び出します。そしてプログラマーは、「serviceRegistered」と「operationFailed」に何を入れるかを決定します。明らかです。
しかし、「operationFailed」からサービスを登録しようとする必要がありますか? この方法では、アプリケーションがサービスを頻繁に登録しようとするのではないかと心配しています。「操作失敗」に「スリープ」または「一時停止」を入れる必要がありますか? しかし、いずれにせよ、アプリケーションがサービスを登録できない場合、他のこともできないように思えます (たとえば、GUI の処理など)。または、DNSSD.register がある種の並列処理を導入する可能性がありますか? つまり、新しいスレッドを開始しますが、「操作に失敗しました」からサービスを登録しようとすると、膨大な数のスレッドが生成される可能性があります。それは起こり得ますか?もしそうなら、それは問題になるべきですか?その場合、どうすればこの問題を解決できますか?