2012-05-23 5 views
0

나는 UDP 소켓을 통해 동시에 약 1000 명의 환자 모니터를 제어하기 위해 Linux에 프로그램을 작성하고 있습니다. 필자는 단일 환자 모니터 장치에서 데이터를 수집하기 위해 메시지를 구문 분석하고 전송하는 라이브러리를 작성했습니다.많은 실시간 장치와 연결 유지

  • 지속적으로 300 밀리 초 (다른 장치 다를 수 있습니다)의 최대 시간이 기간 내에 컴퓨터 클라이언트에서 살아 요청을 받아야 각 장치, 그렇지 않으면 연결 : - 아래의 장치에 다양한 스케줄링 제약이있다 분실되었다.
  • 컴퓨터 클라이언트는 일정 기간 내에 데이터를 가져 오기 위해 장치로 폴 요청을 보내야합니다. 환자 모니터의 평균 데이터를 약 5 초 동안 폴링하므로 5 * 3 = 15 초마다 폴링 요청을 보내야합니다. 15 초 내에 요청을 보내지 못하면 장치에서 연결이 끊어집니다.

이제는 현재 프로그램을 확장하여 약 1000 개 이상의 장치를 동시에 처리 할 수있게되었습니다. 지금 당장 내 프로그램은 하나의 장치에서 응답을 효율적으로 처리하고 구문 분석 할 수 있습니다. 여러 장치를 처리하는 경우 여러 장치의 여러 응답을 동기화하고이를 직렬화하여 TCP 소켓을 통해 스트리밍해야 원격 컴퓨터에서 데이터를 분석 할 수 있습니다. 음, 다중 생산자와 단일 소비자 문제를 잘 알고 있기 때문에 문제가되지 않습니다. 나의 주요 관심사는 살아있는 연결 1000+ 장치를 유지하기 위해 어떤 접근 방식을 사용해야 하는가입니다. 장치 당

  • 를 사용하여 하나 개의 스레드 - :

    인터넷을 통해 읽고 본 웹 사이트의 유사한 질문 검색 후, 나는 주로 두 가지 옵션을 고려하고있다. 1000+ 장치를 제어하기 위해 나는 1000+ 스레드를 만드는 것을 끝내고 나에게 적합하지 않은 것으로 보입니다.

  • 멀티플렉싱 접근 방식을 사용합니다.주의가 필요한 FD를 선택하고 한 번에 하나씩 처리하십시오. 어떻게 멀티플렉싱 방식을 사용하면 위의 두 가지 상수를 고려하여 모든 장치와의 연결을 유지할 수 있는지 확실하지 않습니다.

UDP 소켓을 통해 1000 개 이상의 실시간 장치를 제어해야하는 상황을 처리하는 방법에 대한 제안과 조언이 필요합니다. 각 장치는 300 밀리 초마다 일부 활성 신호를 필요로하며 (장치마다 다름) 연결 단계에서 언급 한 시간 간격의 약 3 배에 폴링 요청이 필요합니다. 예를 들어, ICU의 환자 모니터는 실시간 (1 초 평균) 데이터를 요구할 수 있습니다. 일반 병상의 환자 모니터는 평균 10 초 데이터가 필요할 수 있으므로 두 장치의 폴링 기간은 3 * 1 (3 초)이고 3 * 10 (30 초).

감사 Shivam Kalra

대부분의 중 접근
+1

Windows에'select' /'poll'보다 더 좋거나 더 효과적인 것이 있는지는 잘 모르겠지만 꼭 있어야합니다. Linux에서는 예를 들어 다음을 사용할 수 있습니다. ['epoll'] (http://linux.die.net/man/4/epoll), 그리고 BSD 시스템도 비슷한 방법을 가지고 있습니다. –

+0

@ User-104 :이 질문에서 나를 도울 수 있습니다. 나는 당신이이 질문에 기초하여 해결되었다고 생각합니다 : tinyurl.com/jnoekwf –

답변

3

는 최소한 기능적으로 당신이 설명하는 기능을 처리 할 수 ​​있지만, 가지 성능의 소리가 중요한 문제가 될 것이다. 당신이 제공 한 수치를 보면 응용 프로그램이 CPU 붐 일 수있는 것처럼 보입니다.

멀티 스레드 접근 방식은 컴퓨터에서 사용 가능한 모든 CPU 코어를 사용하는 장점이 있지만 멀티 스레드 프로그램은 안정적이고 견고 해지는 것으로 유명합니다.

Apache의 오래된 검증 된 포크 작업자 모델을 사용할 수도 있습니다. 예를 들어 별도의 프로세스를 생성하여 최대 100 개의 장치를 처리 할 수 ​​있습니다. 그런 다음 프로세스에 대한 연결 매핑을 관리하는 코드를 작성해야합니다.

호스트 호스트를 여러 개 사용하여 여러 장치간에 장치를 배포 할 수도 있습니다. 이렇게하면 복구 상황을보다 쉽게 ​​처리 할 수 ​​있다는 이점이 있습니다. 응용 프로그램이 미션 크리티컬 (mission critical)이 될 수있는 것처럼 들리며, 하드웨어가 손상되면 다른 하드웨어가 자동으로 인계되도록 아키텍처를 구성해야 할 수도 있습니다.