2010-10-28 14 views
54

Projektuję nowy serwer, który musi obsługiwać tysiące połączeń UDP (gdzieś około 100 000 sesji). Wszelkie dane wejściowe lub sugestie, których należy użyć?select vs poll vs epoll

+1

którego używasz? różne os mają różne specyficzne cechy. –

+0

Linux Redhat wersja korporacyjna 5 – ravi

+1

@ravi: Powinieneś także sprawdzić struktury oparte na zdarzeniach (asychroniczne), takie jak Twisted, gdzie możesz napisać swój serwer i przetestować go za pomocą różnych metod głosowania: [TwistedMatrix.com: Wybór reaktora] (http : //twistedmatrix.com/documents/current/core/howto/choosing-reactor.html) –

Odpowiedz

17

Linux: epoll FreeBSD: kqueue Okna:?

Istnieją biblioteki otoki, takie jak libevent i libev, które mogą je dla ciebie streścić.

+4

+ 1 na libev, to niesamowite! – dcolish

+13

Windows: IO Completion Port – kibab

+6

A tak przy okazji. IOCP: Windows NT 3.5, 1994; kqueue: BSD 4.1, 2000; epoll: jądro Linux 2.5.44, 2002. – Soonts

37

Odpowiedź jest epoll, jeśli używasz systemu Linux, kqueue, jeśli używasz FreeBSD lub Mac OS X, i portów zakończenia i/o, jeśli jesteś w systemie Windows.

Niektóre dodatkowe rzeczy będą (prawie na pewno), które chcesz badania są: techniki wyważania

  • obciążenia
  • wielowątkowy sieci
  • architektura Database
  • Doskonałe stoły hash

Dodatkowo, ważne jest, aby było ważne: w UDP nie ma "połączeń" w przeciwieństwie do TCP. Byłoby również w twoim najlepszym interesie, aby zacząć od małych i większych rozmiarów, ponieważ debugowanie rozwiązań opartych na sieci może być wyzwaniem.

+5

Dzięki za odpowiedź. Rozumiem, że nie ma czegoś takiego jak połączenia UDP, ponieważ jest to komunikacja bezpołączeniowa zorientowana na komunikację. Aplikacja, o której myślałem, jest oparta na sesjach, więc zamiast sesji wspomniałem o niej jako o połączeniu. Mój błąd. Próbowałem także ponad 200 000 sesji w oparciu o select z aplikacją wielowątkową. Chciałem tylko zoptymalizować. Nie jest też nowością w budowaniu skalowalnej architektury. Równoważenie obciążenia może nie być odpowiednie dla rodzaju serwera, na który patrzę. Jest to z pewnością sieć wielowątkowa. Najprawdopodobniej użyje pewnego rodzaju wzoru producenta/konsumenta. – ravi

40

Autor CURL napisał niesamowity artykuł na temat poll vs select vs event libraries.

+5

Ten przewodnik w ogóle nie pomógł. Zasadniczo założono, że wszyscy znają główne różnice między tymi trzema. – enigmaticPhysicist

+3

Podaj co najmniej podsumowanie, a nie tylko odsłonięty link – MikeMB

+0

@enigmaticPhysicist - Zgadzam się z Tobą. Znalazłem ten artykuł bardziej szczegółowo, mam nadzieję, że pomoże: https://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-difference-for-system-architects/ –