2009-06-05 5 views
5

Я пытаюсь написать простой сервер с Thrift. Сначала это выглядело многообещающим, но я столкнулся с проблемой одновременного подключения нескольких клиентов. Я использую TThreadPoolServer, который позволяет 4 клиенту подключаться, а затем блокирует других клиентов, пока я не убью его от подключенного. Что я могу сделать, чтобы одновременно подключать более (возможно, несколько сотен) клиентов, не увеличивая число потоков. Я предположил, что рабочие потоки позволяют выполнять один клиентский запрос за раз, но похоже, что один поток обрабатывает одно соединение до его закрытия. Я бы хотел избежать ситуации, когда мои клиенты должны снова открыть сокет для выполнения действия.Большое количество одновременных подключений в бережливости

ответ

3

Принимая другой подход, если вы используете C++ для создания своего сервера, вы можете использовать TNonblockingServer вместо TThreadPoolServer, что позволит вам принимать сразу несколько подключений, независимо от того, сколько потоков активно и т. Д.

Это, как говорится, не обязательно сможет работать быстрее (обработчики все еще выполняются в пуле потоков), но больше клиентов смогут сразу подключиться к вам.

Вот что код выглядит для сервера NB:

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:

class SimpleThreadManager : public ThreadManager::Impl { 

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

Этот объект ThreadManager передается ThreadPoolServer coonstructor, поэтому пройти большее число конструктору этого объекта для увеличения размера пула потоков.

+0

Но он не хочет, чтобы увеличить количество потоков. –

+0

Упс, я полностью пропустил это :( – JackOfAllTrades

+1

Что вы увеличиваете в ожидании TaskCountMax, разве это не то, что вы хотите? – rmn

 Смежные вопросы

  • Нет связанных вопросов^_^