여기는 simple server application using Bonjour and written in 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.
}
}
나는 이것을 다음과 같이 이해합니다. 우리는 차례로 "DNSSD.register"메소드를 호출하는 "registerService"메소드를 호출하는 서비스를 등록하려고 시도 할 수 있습니다. "DNSSD.register"는 서비스 등록을 시도하고 일반적으로 서비스가 "성공적으로 등록 됨"및 "등록 실패"라는 두 가지 결과로 끝날 수 있습니다. 두 경우 모두 "DNSSD.register"는 마지막 인수로 DNSSD.register에 주어진 객체의 해당 메소드 ("serviceRegistered"또는 "operationFailed")를 호출합니다. 그리고 프로그래머는 "serviceRegistered"와 "operationFailed"에 넣어야 할 것을 결정합니다. 그것은 분명합니다.
하지만 "operationFailed"에서 서비스를 등록해야합니까? 나는이 방법으로 내 신청서가 서비스를 너무 자주 등록하려고 시도 할까 봐 걱정된다. "sleep"또는 "pause"를 "operationFailed"에 넣어야합니까? 그러나 어쨌든 응용 프로그램이 서비스를 등록 할 수 없을 때 다른 것을 할 수 없게됩니다 (예를 들어 GUI를 처리하는 것처럼). 아니면 어떤 종류의 병렬 처리를 도입 한 DNSSD.register 일 수 있습니까? 나는 새로운 스레드를 시작하지만 "operation Failed"에서 서비스를 등록하려고하면 많은 수의 스레드를 생성 할 수 있습니다. 일어날 수 있습니까? 그것이 사실이라면, 그것은 문제가되어야합니까? 그리고 그것이 사실이라면 어떻게이 문제를 해결할 수 있습니까?