문제

나는 현재 다음 채팅 비유와 일치하는 설정이있는 응용 프로그램을 사용하고 있습니다.

  • 채팅은 메모리에 고정되어 있고 채팅 메시지 목록이 포함 된 개체입니다.
  • 채팅은 여러 브라우저 창에서 렌더링되며 A4J : PUSH로 업데이트가 시작됩니다.

프로그래밍 방식 설정은 다음과 같습니다. 메시지가 포함 된 채팅 객체의 인스턴스는 다른 세션에서 Page Scoped Seam 구성 요소간에 공유됩니다. 이제 세션이 새 메시지를 게시하면 채팅 객체를 수정하면 모든 이음새 구성 요소를 새 메시지를 알려 새 상태를 모든 클라이언트에서 UI에 전달할 수 있도록해야합니다.

나는 이것을 달성하는 세 가지 방법을 생각할 수 있습니다.

  1. 채팅 ID가있는 Seam의 이벤트는 매개 변수로 이벤트를 한 다음 각 구성 요소가 ID를 확인하고 메시지를 업데이트하거나 무시합니다.
  2. JMS 대기열 또는 각 구성 요소가 채팅을 위해 필터로 듣는 JMS 주제 하나
  3. 공유 채팅 객체의 순수한 Java 리스너 메커니즘, 즉 각 이음새 구성 요소가 등록되며 알림은 순수하고 직접적인 Java입니다.

논쟁을 위해 채팅 수가 많고 (수만 명) 채팅 사용자 수가 적다 고 가정합니다 (2-10이라고하자).

각 규모의 성능은 어떻게 현명합니까? 이음새로 이것을 어떻게 만들고 잘 수행하는지 다른 제안이 있습니까?

내가 알 수 있듯이 (1) 통합되고 깨끗하지만 결국에는 실제로 필요한 수만 개의 구성 요소에 알릴 수 있습니다. 그래서 아마도 확장되지 않을 것입니다.

(2) 통합 될 것이며 JMS 제공 업체의 성능 (교환 할 수 있음)에만 의존하며 수정없이 클러스터 된 환경에서도 작동합니다. 여기서 JMS의 성능에 대해 잘 모르겠습니다. 즉, 초당 수백 개의 메시지와 다른 필터가 많이있는 수천 명의 청취자가 있습니까?

(3) 필요한 구성 요소 만 알림을 받고 알림은 순수하고 직접적인 Java이기 때문에 빠릅니다. 그러나 교차 세션 / 구성 요소 / 스레드가 수행되기 때문에 동시성 / 액세스 문제가 발생할 수 있습니다.

(1) 및 (3) 클러스터링을지지하는 솔루션은 어느 시점에서 필요한 경우 수동으로 추가해야합니다.

도움이 되었습니까?

해결책

2) 추천합니다. 또한 JMS를 방정식에서 절단하는 것이 좋습니다. 메시징 제공 업체를 전환 할 수 있지만 메시징 시스템의 고급 기능을 사용하지 못하게 할 수 있습니다. Oracle 데이터베이스를 사용하는 경우 aq 합리적인 선택을 할 것입니다 (JMS BTW를 지원합니다). 그렇지 않으면 AMQP를 사용하는 것이 좋습니다. Jboss 메시징 또는 제 3 자 솔루션과 같은 Rabbitmq.

메시징 문제가 분명히 있으므로 메시징 솔루션을 사용하는 것을 선택해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top