2009-06-05 3 views
5

나는 Thrift로 간단한 서버를 작성하려고한다. 처음에는 유망 해 보였지만 동시에 여러 고객이 연결된 문제가 발생했습니다. 나는 TThreadPoolServer를 사용하고 있는데, 이는 4 클라이언트가 연결 한 다음 다른 클라이언트를 차단하여 연결된 서버에서 하나를 죽일 때까지 사용합니다. 스레드 수를 늘리지 않고 더 많은 클라이언트 (수백 명 정도 가능)를 동시에 연결할 수있게하려면 어떻게해야합니까? 나는 작업자 쓰레드가 한 번에 하나의 클라이언트 요청을 수행 할 수 있다고 가정했으나 하나의 쓰레드가 닫힐 때까지 하나의 연결을 처리하는 것처럼 보인다. 나는 고객이 작업을 수행하기 위해 소켓을 다시 열어야하는 상황을 피하고자한다.슬리 프에서 동시 연결 수가 많다

답변

3

C++을 사용하여 서버를 구축하는 경우 TonfigureToolPoolServer 대신 TNonblockingServer를 사용하면 활성 상태 인 스레드 수에 관계없이 한 번에 많은 연결을 허용 할 수 있습니다.

실제로 말해서, 실제로 작업을 더 빨리 수행 할 수는 없지만 (처리기는 여전히 스레드 풀에서 실행됩니다), 더 많은 클라이언트가 한 번에 연결할 수 있습니다.

shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory()); 
shared_ptr<MyHandler> handler(new MyHandler()); 
shared_ptr<TProcessor> processor(new MyProcessor(handler)); 
TNonblockingServer server(processor, protocolFactory, port); 
2
풀에있는 네 개의 스레드 귀하의 제한은 SimpleThreadManager의 기본 생성자에 내장되어

이 ThreadManager 개체는 ThreadPoolServer의 coonstructor에 전달, 그래서이 객체의 생성자에 많은 수의를 통과한다

class SimpleThreadManager : public ThreadManager::Impl { 

public: 
    SimpleThreadManager(size_t workerCount=4, size_t pendingTaskCountMax=0) : 
    workerCount_(workerCount), 
    pendingTaskCountMax_(pendingTaskCountMax), 
    firstTime_(true) { 
    } 
... 
}; 

스레드 풀의 크기를 늘리십시오.

+0

을하지만 그는 스레드의 수를 증가하지 않습니다

여기 코드는 NB 서버의 모습입니다. –

+0

와우, 나는 완전히 그것을 놓쳤다. ( – JackOfAllTrades

+1

당신은 무엇을 원하는가 보류 TaskCountMax를 늘리는가? – rmn

관련 문제