È meglio ascoltare su più porte che ascoltare su una singola porta?

0

Nel mio server, ho 1000 thread che ascoltano 1000 socket UDP diversi. Quando un thread riceve un pacchetto, mette i pacchetti UDP su una coda thread-safe. Il codice è come questo.

   while(true)
    { 
        ......
        socket.receive(packet); 
        packetQueue.add(packet);
        ..... 

    }

In un secondo in media un thread (socket UDP) riceve 50 pacchetti che in media il server riceve

1000 * 50 = 50K

Pacchetti UDP. Il server funziona più o meno bene.

Ma ora voglio cambiare il design un po 'adesso. Ora sto pensando di usare 1 thread che ascolterà su 1 socket e dopo aver ricevuto quei pacchetti quel thread metterà quel pacchetto nella coda come prima.

Quindi ora in media 50K pacchetti UDP arriveranno al server su quella porta.

Questa nuova architettura sarà in grado di gestire questo carico? Dal punto di vista della rete Java, fa alcuna differenza se tutti i pacchetti arrivano a una porta oa porte diverse?

    
posta Al-Alamin 22.03.2018 - 15:17
fonte

1 risposta

1

Dovrebbe gestirlo, dipende dalla tua implementazione.

Un solo thread è sufficiente per inviarlo alla coda. Il problema è la dimensione della coda e quanto velocemente sei in grado di prendere i dati da essa. La dimensione massima del pacchetto UDP in IPv4 è 65.507 byte, moltiplicata per 50.000 e ottieni più di 3 GB al secondo. Devi essere sicuro che i pacchetti non vadano persi se la coda è piena, a meno che non ti dispiaccia

Usa Netty per aiutarti. C'è una domanda simile su stackoverflow

    
risposta data 22.03.2018 - 16:07
fonte

Leggi altre domande sui tag