Próbuję napisać prosty serwer z Thrift. Na początku wyglądało to obiecująco, ale natknąłem się na problem z wieloma klientami połączonymi w tym samym czasie. Używam TThreadPoolServer, który pozwala 4 klientowi łączyć się, a następnie blokować innych klientów, dopóki nie zabiję jednego z podłączonych. Co mogę zrobić, aby umożliwić jednoczesne połączenie większej liczby klientów (prawdopodobnie kilkuset) bez zwiększania liczby wątków. Zakładam, że wątki robocze pozwalają na wykonanie jednego żądania klienta naraz, ale wygląda na to, że jeden wątek obsługuje jedno połączenie, dopóki nie zostanie zamknięte. Chciałbym uniknąć sytuacji, w której moi klienci muszą ponownie otworzyć gniazdo, aby wykonać działanie.Duża liczba jednoczesnych połączeń w oszczędzaniu
5
A
Odpowiedz
3
Biorąc innego podejścia, jeśli używasz C++, aby zbudować swój serwer, można użyć TNonblockingServer zamiast TThreadPoolServer, który pozwoli Ci akceptować wiele połączeń na raz, niezależnie od tego, jak wiele wątków są aktywne, etc ...
W związku z tym niekoniecznie będziesz w stanie pracować szybciej (procedury obsługi nadal działają w puli wątków), ale więcej klientów będzie mogło połączyć się z tobą jednocześnie.
Oto co kod wygląda na serwerze 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
Twój ograniczenie czterech wątków w puli jest wbudowana domyślnego konstruktora SimpleThreadManager:
class SimpleThreadManager : public ThreadManager::Impl {
public:
SimpleThreadManager(size_t workerCount=4, size_t pendingTaskCountMax=0) :
workerCount_(workerCount),
pendingTaskCountMax_(pendingTaskCountMax),
firstTime_(true) {
}
...
};
Ten obiekt ThreadManager jest przekazywany do coonstructor ThreadPoolServer, więc przekazać większą liczbę do konstruktora tego obiektu aby zwiększyć rozmiar puli wątków.
Powiązane problemy
- 1. Liczba aktywnych połączeń Mysqlnd jest zbyt duża. Czy to normalne?
- 2. Duża liczba w C# .NET
- 3. Limit liczby jednoczesnych połączeń w Apache2
- 4. Maksymalna liczba połączeń na hoście z twisted.web.client.Agent
- 5. Wiele jednoczesnych połączeń sieciowych - serwer Telnet, Python
- 6. Jak zatrzymać milion jednoczesnych połączeń TCP?
- 7. Maksymalna liczba połączeń w ChannelFactory
- 8. Liczba połączeń DB otwarte
- 9. Dlaczego liczba jednoczesnych pobrań jest ograniczona?
- 10. Jaka jest teoretyczna maksymalna liczba jednoczesnych (symultanicznych) połączeń HTTP na serwerze Go?
- 11. duża liczba całkowita dodana z CUDA
- 12. Optymalizowanie kodu dla MKMapView - duża liczba adnotacji
- 13. nodejs - Dlaczego Node.js może obsłużyć dużą liczbę jednoczesnych połączeń trwałych?
- 14. Tomcat Java NIO z jednoczesnych połączeń klienckich powolny TCP
- 15. SQL - Jak znaleźć akcje używające wszystkich maksymalnych jednoczesnych połączeń
- 16. matplotlib - kontrolka w kolekcji linii/duża liczba linii
- 17. Czy duża liczba całkowita w powolnej skrzynce num?
- 18. Duża liczba Session_Start z tym samym identyfikatorem sesji
- 19. Komunikat o błędzie "Liczba całkowita za duża" dla 600851475143
- 20. jednoczesnych asynchroniczne wywołania zwrotne
- 21. Liczba otwartych połączeń i sens statusu śpi z połączenia
- 22. obrotowe duża data.table
- 23. Jaka jest maksymalna liczba połączeń cURL ustawionych przez?
- 24. Czy połączenia REST transmisji strumieniowej Firebase są wliczane do limitu jednoczesnych połączeń?
- 25. Jak skonfigurować serwer Apache2, aby zezwalać na wiele jednoczesnych połączeń z tego samego adresu IP?
- 26. Obsługa WCF obsługuje tylko 10 jednoczesnych połączeń, niezależnie od tego, co robię.
- 27. Ponowne używanie połączeń HTTP w Golang
- 28. Apache Spark on YARN: Duża liczba plików danych wejściowych (łączenie wielu plików wejściowych w iskrze)
- 29. także timeout w node.js http.get podczas uzyskiwania duża liczba pobrań graficznych
- 30. Jak określić liczbę połączeń wymaganych w puli połączeń?
Ale on nie chce zwiększyć liczbę wątków. –
Ups, całkowicie mi to umknęło :( – JackOfAllTrades
czym jest zwiększenie oczekującegoTaskCountMax, czy to nie jest to, czego chcesz? – rmn