2010-03-11 2 views
0

일부 중간 브로커에 캐시되어야하는 이벤트와 데이터를 보내는 네트워크 반대편에 시스템이 있다고 가정하십시오.싱글 톤 네트워크 이벤트 프로세서는 괜찮습니까?

응용 프로그램의 모든 구성 요소에 브로커에 대한 새 구독을 알리는 대신 성능 및 단순성을 결정합니다 (브로커 구독을 처리하는 타사 라이브러리는 꽤 이상하지 않습니다). 이벤트 처리기는 브로커에 가입하고 구성 요소가 제공하는 구독 청취자에게 이벤트를 수신 할 때 프로그램 방식으로 이벤트를 시작합니다. 이 싱글 톤에서 캐시 된 데이터를 공유 할 수도 있습니다. 이렇게하면 네트워크 연결이 크게 줄어 듭니다.

그러나 싱글 톤에 대한 대부분의 논의에 따르면 동시성이나 하드웨어상의 이유로 액세스 포인트가 하나만 필요하지 않는 한 항상 악의적입니다. 브로커를 통해 모든 데이터를 요청할 수 있기 때문에 모든 구성 요소에 자체 구독 및 자체 개인 데이터 캐시가있을 수 있기 때문에 이것은 내 상황이 아닙니다. 그러나 이것은 200 개의 네트워크 연결을 쉽게 추가 할 수 있습니다.

싱글 톤이 악의적 인 이유는 200 개의 데이터 복사본이있는 브로커에 200 개의 연결이 더 이상 사용하지 않는 것입니다. 이것으로 게임 속도가 느려지지만 게임이 중단되지 않으면 애플리케이션을 사용할 수 있습니다.

답변

1

프로세스 내에서 여러 클라이언트를 서비스하는 브로커 클라이언트 오브젝트에 본질적으로 잘못된 것은 없습니다.

악마가되는 싱글 톤에 관한 모든 이야기는 실제로는 전역 변수이 악합니다. 싱글 톤은 변경 가능한 상태에 대한 액세스 포인트를 static으로 제공하기 때문에 악의적 인 것이됩니다. 단 하나의 인스턴스 만 있기 때문에가 아닙니다.

그런 점에서, Broker.getInstance()을 호출하는 대신 종속성 주입을 사용하여 연결하는 것이 좋습니다. 이렇게하면 클라이언트 코드가 사실 싱글 톤이라는 가정을하지 않게됩니다.