2012-04-05 4 views
0

나는 서버와 150 대의 클라이언트 컴퓨터를 가지고있다. 모든 클라이언트가 서버에 등록하고 서버는 등록 된 클라이언트에서 메소드 호출 (콜백)을 수행합니다.서버 아키텍처 디자인에서 클라이언트 연결을 확인 하시겠습니까?

이 시스템에서는 서버가 주기적으로 (연결 테스트) 연결된 모든 클라이언트에 ping을 수행합니다 (ping은 콜백 메소드 임). 하지만 모든 클라이언트가 스레드에서 작업을 ping 할 경우. 사용할 수없는 클라이언트에서 메서드 호출 대기 시간 때문에 너무 느리게 작동합니다. 그리고 연결이 끊어진 경우 시간 초과가 발생할 때까지 기다립니다. 그래서 대기 시간이 너무 깁니다. 연결 상태 검사에 대한 새로운 아이디어가 있습니다.
연결 된 클라이언트마다 스레드를 생성합니다. 그리고 각 스레드는 자신의 클라이언트를 제어합니다. 따라서 모든 시스템 연결 검사는이 스레드에 의해 수행됩니다.

유용할까요?

이 프로젝트에 대한 몇 가지 전문적인 제안은 있습니까?

감사합니다.

답변

0

클라이언트를 검사 할 때 서버는 클라이언트의 클라이언트 역할을하므로 실제로 양방향 공정한 올바른 아키텍처입니다. 중앙 노드가 클라이언트 상태를 인식하게하려면 클라이언트가 특정 간격으로 하트 비트 메시지로 폴링하여 서버에 인사 할 수 있도록하십시오. 서버가 다음에 예상되는 하트 비트를 수신하지 않으면 클라이언트는 죽은 것으로 간주됩니다. 더 많은 스레드를 시작하면 이점이 생기지 않지만 성능이 떨어질 수 있습니다. 하트 비트를 처리하기 위해 작업자 스레드 또는 일종의 액터 패턴을 사용하는 것을 고려하십시오.

+0

클라이언트가 서버 객체에 연결되어 sayHello 메소드를 호출했다고 생각하십시오. 반면 서버는 클라이언트 메소드를 호출하지만 ...이 클라이언트는 응답하지 않습니다. (클라이언트는 서버 메소드를 호출 할 수 있지만 서버는 클라이언트 메소드를 호출 할 수 없습니다.) 어떻게 생각하세요? – emin

+0

서버는 정의에 따라 클라이언트를 호출 할 수 없습니다. 응답을 보내 클라이언트의 요청을 처리합니다. 그게 다야. – ahanin

+0

서버는 클라이언트에 대한 콜백을 수행 할 수 있습니다. 이것은 주로 사용되는 메커니즘입니다. http://docs.oracle.com/cd/E13211_01/wle/rmi/callbak.htm – emin

관련 문제