2012-12-24 3 views
1

websocket 기반 MVC 아키텍처를 사용하고 있습니다.이 MVC 라이프 사이클은 Spring 및 Struts와 비슷하지만 현재는 내보기에 대한 정기적 업데이트를 지원해야합니다.주기적 업데이트를위한 Java 디자인

  1. 각 컨트롤러는
  2. 컨트롤러가주기적인 간격
  3. 나는 각 클라이언트에 대한 세션을 유지하고 있지 않다에서보기를 업데이트해야하는 클라이언트의 각보기의 존재에 대한 책임이 있습니다. 따라서 컨트롤러는 모든 클라이언트에 대해 업데이트해야합니다.
  4. 컨트롤러 내부에 스레드를 만들고 싶지 않습니다. 각 뷰에 대해 컨트롤러가 너무 많기 때문입니다.
  5. 따라서 컨트롤러를 통해주기적인 업데이트를 처리해야하는 별도의 모듈을 만들고 싶습니다 (Controller 메서드를 호출하여).
  6. 마침내 클라이언트를 표시 전용으로 유지하고 싶습니다. 따라서 클라이언트 측에서 타이머를 유지하고 싶지 않습니다.

표준 설계 패턴 (예 : MVC)을 따르도록 도와주세요.

답변

0

스프링의 2 센트, websocket 프로그래머를위한 struts 프로그래머.

1. 각 컨트롤러는 [좋은 디자인이 기술을 통해없는 희망] 클라이언트에서 각보기에 존재하는 에 대한 책임

점 2 점 3

접근 1 - 세션이 없으므로 요구 사항에 맞는 특정 간격 (예 : 2 분) 또는 특정 이벤트 (페이지 새로 고침/재로드) 이후에 UI/View에서 업데이트 요청을 컨트롤러에 보내도록 요청하십시오.

접근법의 단점 - UI/뷰 사이드 코드로 자주 업데이트하면 클라이언트 코드를 변경하고 응용 프로그램을 공격하는 데 사용할 수 있으므로 무릎을 꿇고 응용 프로그램을 가져올 수 있습니다.

이 문제를 피하려면 각 요청이 신빙성 있고 완전하며 독립적으로 실행할 수 있어야합니다.

접근 방식의 장점 - 응용 프로그램의 크기 조정을 고려하면 무엇이든 확장 할 수 있습니다.

포인트 4, 5 그들은 항상하지만, 두 번째 방법 [실행 속도 측면에서] 컨트롤러 내부 스레드를 얻을 것이다

controller { 
HelperCalssReference.doSomething(){}; 
} 

controller { 
    doSomething(){}; 
} 

또는

이 더 비슷 분리됨.

포인트 6 점 3.

"클라이언트 측에서 어떤 타이머가"그럼 하지만 "나는 각 클라이언트에 대해 어떤 세션을 유지하고 있지 않다"서버 측에서 세션을 유지하지 당신은 그것을 유지해야 어딘가에 선택하십시오.

서버에서 세션을 유지 관리하지 말고 클라이언트를 추적하고 2 분 후 새 업데이트를 보내야하지만 5시 이후에 말을 멈추려는 경우 오프라인 상태이거나 클라이언트가 오프라인 상태 일 때 어떻게 알 수 있습니까? 서버에서 업데이트되었지만 클라이언트 UI가 온라인 상태 일 수 있으며 업데이트를 기다리는 중일 수 있습니다.

포인트는 프로그램에 논리적 중단 점이 있지만 위의 요구 사항에서 찾을 수 없습니다.

가능성있는 접근 방법 -

  1. 를 사용하여 REST는 유지 응용 프로그램 확장 할 수 및 비 상태. [https://capgemini.github.io/architecture/is-rest-best-microservices/은 "디자인/구현/구성의 어려움"섹션을 읽어야합니다.
  2. 할리우드 디자인 원칙을 사용하지만 누가 할리우드 UI /보기 또는 서버인지 결정해야합니다.
  3. 이벤트 중심의 접근 방식은 업데이트를 요청할 때 사용자 이벤트가 결정하도록 도움을 줄 수 [여러 번의 클릭 1 초에 3 업데이트를 요청 클라이언트에 대한 조심.]

행복 :

을 설계