2010-05-17 2 views
6

응용 프로그램 범위에서 로컬 XMPP 서버에 대한 연결을 만들고 저장하는 응용 프로그램을 지금 개발 중입니다. 연결 방법은 cfc에 저장되어 Application.XMPPConnection이 사용될 때마다 연결되고 권한이 부여되며 연결을 사용하여 사용자에게 라이브 이벤트를 보냅니다. 내가 알 수있는 한, 이것은 잘 작동하고 있습니다. 그러나 그것은 어떤 종류의 스트레스에서도 시험받지 못했습니다.큰 개체 (예 : Java 구성 요소)를 Application 변수에 저장해도 괜찮습니까?

내 질문 : 이 설정으로 인해 나중에 문제가 발생합니까? 이런 식으로 응용 프로그램 변수를 사용하는 다른 사람들의 증거를 찾을 수 없기 때문에 나는 묻습니다. 난 레일을 사용하지 않았다면 대신 CF의 이벤트 게이트웨이를 사용하여 동일한 작업을 수행 할 것입니다.

답변

7

크기 자체는 문제가되지 않습니다. 요청 당 하나의 객체를 초기화한다면 더 많은 메모리를 소모하게됩니다. 문제는 액세스입니다.

동일한 개체에 대해 많은 요청이 경쟁하는 경우 해당 개체의 액세스 시간과 인스턴스화를 측정해야합니다. 데이터 객체의 경우 두 개 이상의 스레드에서 읽을 수 있습니다. 내 이해,하지만, 개체의 함수를 호출 할 때 함수가 반환 될 때까지 다른 스레드로 해당 개체를 잠급니다.

또한 개체가 상태를 유지 관리하는 경우 여러 스레드에서 해당 데이터를 가져 오거나 설정할 때 수행 할 작업을 고려해야합니다. 경쟁 조건으로 끝날 것입니까?

세션 범위에서이 개체를 처리하여 사용자 당 인스턴스화 될 수 있습니다 (한 명 또는 두 개의 동시 요청 만 가능).

+0

답장을 보내 주셔서 감사합니다. 내가 개체에 액세스하는 여러 스레드의 시나리오를 고려해야 할 수도 있습니다,하지만 그 방법은 바로 지금은 꽤 좋은 생각합니다. Application 범위에 저장되고 모든 사용자가 공유하는 유일한 객체는 (Smack 라이브러리에 의해 생성 된) XMPP 연결 객체입니다. 아주 빠른 xmpp 명령을 로컬 오픈 파이어 서버에 보내야합니다. 이 경우 태그가 도움이 될까요? –

+0

대기중인 500 개의 요청이 단일 연결이 해제 될 때까지 기다리는 것을 상상해보십시오. (cflock을 사용하는 경우.) 다양한 요인에 따라 큰 병목 현상이 발생할 수 있습니다. –

+0

CFLOCK을 사용하지 않더라도 (대부분 outmoded) CF는 MX (6) 이후 스레드로부터 안전합니다. 동일한 데이터 위치를 읽는 다중 스레드는 대기 할 필요가 없지만 호출 함수로 인해 대기열에 들어갑니다. 적어도 그것은 그것이 나의 이해입니다. –

3

물론 응용 프로그램 범위가 다른 응용 프로그램의 모든 사용자가 사용하는 경우 이러한 구성 요소를 저장할 수 있습니다. 지금, 가능한 문제는 다음과 같습니다 구성 요소 (들)이 응용 프로그램 중에 설정하는 경우 초기화에 필요한

  • 시간

    1. 크기의 상태를 얻기/설정과 조건을 경주
    2. 시작 이러한 구성 요소들

    첫 번째로, 다음과 같은 방법으로 구성 요소의 크기를 계산할 수 있습니다. 기억. 요즘에는이 주제에 대한 많은 게시물이 있으므로 쉽게 찾을 수 있습니다. 내부에 큰 구조 나 쿼리가 저장되어 있지 않으면 여기서 확인을 할 수 있습니다.

    두 번째로,이 cfc에 DB의 대용량 쿼리를 작성하거나 느린 구문 분석을 수행하지 않는 경우에도 여기에서도 좋습니다.

    셋째, 더 많은 사용자가 이러한 구성 요소의 상태를 변경하는 상황에주의하십시오. 그렇다면 구성 요소의 각 설정에서 cflock을 사용하십시오.