2010-10-28 31 views
54

Sto progettando un nuovo server che deve supportare migliaia di connessioni UDP (da qualche parte circa 100.000 sessioni). Qualche input o suggerimento su quale usare?select vs poll vs epoll

+1

quale sistema operativo sei? differenti sistemi operativi diversi. –

+0

Linux Redhat versione aziendale 5 – ravi

+1

@ravi: è necessario verificare anche framework basati su eventi (asincroni) come Twisted, in cui è possibile scrivere il server e testarlo con vari metodi di polling: [TwistedMatrix.com: Scelta di un reattore] (http : //twistedmatrix.com/documents/current/core/howto/choosing-reactor.html) –

risposta

17

Linux: epoll FreeBSD: kqueue Finestre: ??

Ci sono librerie di wrapper, come libevent e libev, che possono astrarre questo per te.

+4

+ 1 su libev, è fantastico! – dcolish

+13

Windows: porta di completamento IO – kibab

+6

E a proposito. IOCP: Windows NT 3.5, 1994; kqueue: BSD 4.1, 2000; epoll: kernel Linux 2.5.44, 2002. – Soonts

37

La risposta è epoll se si utilizza Linux, kqueue se si utilizzano porte di completamento FreeBSD o Mac OS X e i/o se si utilizza Windows.

Alcune cose aggiuntive si (quasi certamente) desiderare di ricerca sono: tecniche di bilanciamento

  • carico
  • networking
  • architettura di database
  • tabelle hash perfetta multi-threaded

Inoltre, è importante da notare a UDP non ha "connessioni" al contrario di TCP. Sarebbe anche nel tuo migliore interesse iniziare in scala ridotta e di dimensioni maggiori, dal momento che il debugging di soluzioni basate su reti può essere difficile.

+5

Grazie per la risposta. Capisco che non esiste una cosa chiamata connessioni UDP in quanto è un comunicatore orientato alla connessione. L'applicazione che avevo in mente è basata sulla sessione, quindi invece della sessione l'ho menzionata come connessione. Colpa mia. Inoltre ho provato più di 200.000 sessioni basate sulla selezione con un'applicazione multithread. Volevo solo ottimizzare. Inoltre, non è nuovo per la creazione di una soluzione di architettura scalabile. Il bilanciamento del carico potrebbe non essere adatto al tipo di server che si sta guardando. È sicuramente un networking multithread. Probabilmente useranno un qualche tipo di pattern produttore/consumatore. – ravi

40

L'autore di CURL ha scritto un articolo straordinario su poll vs select vs event libraries.

+5

Questa guida non ha aiutato affatto. Fondamentalmente supponeva che tutti conoscessero le principali differenze tra i tre. – enigmaticPhysicist

+3

Si prega di fornire almeno un sommario e non solo un link nudo – MikeMB

+0

@enigmaticPhysicist - Sono d'accordo con te. Ho trovato questo articolo più dettagliato, spero che aiuti: https://www.ulduzsoft.com/2014/01/select-poll-epoll-practical-difference-for-system-architects/ –

Problemi correlati