여러 동시 클라이언트 연결 (대략 100 개)을 처리 할 서버를 만들고 있는데, 여기서 클라이언트는 많은 양의 데이터 및 서버 패키지를 펌프하고 다른 원격 위치로 보냅니다.단일 이벤트 루프에 여러 개의 cURL 다중 핸들이 허용됩니까?
내가하고 싶은 것은 각 클라이언트에서 보낸 데이터를 자신의 데이터 구조 (일부 연결 목록)로 '그룹화'하고 이러한 목록을 동시에 처리하는 것입니다. 처리량이 중요하므로 최대한 많은 양의 데이터를 동시에 전송할 수 있기를 원합니다 (최대 10k 개의 손쉬운 핸들을 동시에 처리 할 수 있음).
내가 생각하고 접근 방법은 다음과 같습니다
- 각 쉬운 핸들을 처리하는 큰 스레드 풀을 (100 개 스레드를 말한다)하게한다.
- 모든 10k 쉬운 핸들에 대해 멀티 핸들을 처리하는 단일 스레드가 있습니다.
- 멀티 핸들을 처리하는 여러 스레드 (예 : 4)를 생성하여 각각 2500 개의 쉬운 핸들을 처리합니다.
- 클라이언트마다 멀티 핸들이 있으므로 잠재적으로 100 개의 멀티 스레드 핸들을 처리 할 수 있습니다.
내가 알고 싶은 것은 # 2와 # 3을 결합하여 단일 이벤트 루프에서 여러 개의 다중 핸들을 처리하는 단일 스레드를 가질 수 있는지 여부입니다. 그런 일이 허락 되었습니까? 그렇다면, 심지어 말이 되겠습니까? 가능하다면 멀티 핸들 당 클라이언트 프로세싱을 그룹화하는 요구 사항을 만족시킬 것이며 다중 핸들 당 지속적 연결을 이용할 수있게 해줄 것입니다. 그렇지 않은 경우, 모든 클라이언트에 대해 지속적인 연결을 최대한 활용할 수있는 유일한 방법은 옵션 # 4입니다. 가급적이면 나는 우리가 따르고있는 프로그래밍 모델로 인해 어떤 제약으로 인해 쓰레드의 수를 줄이고 싶다.
빠른 응답을 보내 주셔서 감사합니다. 옵션 # 3을 사용한다면 코어 수를 늘릴 계획 이었으므로 완전히 동의합니다. 내 계획은'curl_multi_socket_action' API를 사용하기도 했으므로 올바른 방향으로 가고있는 것 같습니다 (이것은 처음으로 컬을 사용하는 것입니다).스레드 당 여러 개의 멀티 핸드가 허용된다는 것은 여전히 좋은 일이지만 3 번 옵션을 사용하여이 작업이 어떻게 진행되는지 살펴볼 것입니다. – James