2011-04-07 5 views
1

저는 Java를 사용하여 P2P 응용 프로그램을 작성하고 있습니다. 더 구체적으로 말하자면, 노드 간 통신 시스템과 같은 토큰 링을 구현하기 위해 RMI를 사용하고 있습니다. 내결함성 시스템을 실현하기 위해 노드의 충돌을 감지해야합니다. 링의 각 노드는 X 초 동안 토큰을 기다려야합니다. 이 시간이 지나면 노드가 깨어나서 어떤 작업을 수행해야합니다 (예 : 토큰을 가져올 수 있음). 각 노드에서 시간 초과를 실현하는 데 사용할 수있는 방법은 무엇입니까?P2P 아키텍처에서 시간 초과 사용

미리 감사드립니다.

답변

1

이것은 P2P 시스템의 전형적인 문제입니다. 짧은 대답은 : 선택한 지연 후에 원격 피어로부터 응답을받지 못하면 도달 할 수 없다고 가정해야합니다 (잘못 될 위험이 있음).

이것은 원격 피어가 오프라인이거나 충돌하는 것을 반드시 의미하는 것은 아니며, 누군가가 케이블 깊숙한 곳에서 케이블을 자르고 바다를 건너는 다른 방법이 없다는 것을 의미 할 수도 있고, 대체 채널에 과부하가 걸릴 수도 있습니다 대역폭/연결 요청을 만족시킬 수 없습니다.

하단 문제는 원격 피어 (예 : 누군가 케이블을 끊었는지, 피어가 실제로 충돌 했습니까?)와 관련하여 문제가 발생했을 때 연결에 어떤 문제가 발생했는지 알 수 없다는 것입니다. 얼마나 열심히 노력해.

+0

안녕하세요! 답변 해주셔서 감사합니다! 네 말에 전적으로 동의 해. 문제는 노드가 토큰이 다른 노드가 자신의 원격 메소드 "passToken"을 호출하기를 기다리고 있다는 것입니다. 그래서, 내 질문은 : 자바에서 선택한 지연 후 작업을 수행하는 가장 좋은 방법은 무엇입니까? Timer 클래스를 알고 있지만 스레드를 사용하지 않는 것을 선호합니다. – Davide

+0

@Davide 정교한 작업을위한 Quartz-scheduler라는 라이브러리가 있지만, java.util.concurrent 패키지의 ScheduledExecutorService와 같은 간단한 것으로 시작할 수 있습니다. 지연 후에 실행될 작업을 제출할 수 있습니다. – JVerstry

+0

감사! 나는 당신의 솔루션을 적용하려고합니다! – Davide