TCP o UDP per un gioco multiplayer?

10

Questa è una domanda che vedo molto. La maggior parte delle persone dice UDP sempre per giochi in tempo reale su TCP. La mia comprensione è che TCP tenta di inviare nuovamente i pacchetti più e più volte dall'altra parte, mentre a UDP non interessa.

La maggior parte delle cose che ho letto è che UDP è un must per qualsiasi gioco in tempo reale e TCP è terribile. Ma il fatto è che la maggior parte delle persone sembra comunque implementare una qualche forma di TCP su UDP. E ho anche sentito che la differenza tra i due è trascurabile dato che non siamo più negli anni '80 e internet è ora abbastanza veloce e affidabile.

La mia comprensione generale qui è sbagliata? Qualcuno può chiarirlo?

    
posta flooblebit 14.02.2017 - 19:23
fonte

2 risposte

8

Dipende se parli di peer-to-peer, client / server con gli utenti che eseguono il server, o client / server con un centro dati che esegue il server. Solo nel secondo caso la rete è veramente veloce e affidabile. I computer dei tuoi utenti sono non garantiti per essere veloci e sicuramente non saranno affidabili.

UDP ti offre un maggiore controllo sul tipo di implementazione simile a TCP che stai facendo. Ti offre una maggiore flessibilità per eseguire pacchetti fuori ordine, eliminare i pacchetti che ritieni inutili mentre riprendi i pacchetti che ritieni importanti, quel genere di cose. Ma questo dovrebbe essere fatto solo se necessario e se si dispone delle competenze necessarie.

Se puoi fare a meno di questa flessibilità, il protocollo TCP funziona abbastanza bene e ti fa risparmiare un sacco di tempo. Anche gli studi professionali (come quello a cui ho lavorato) usano TCP se non hanno assolutamente bisogno di UDP, e hanno dedicati alla programmazione di rete

.     
risposta data 14.02.2017 - 19:41
fonte
2

Sarebbe un'ipotesi affermare che "Internet è ora abbastanza veloce e affidabile" come ha sottolineato @ordous e anche pericoloso.

Il motivo per cui UDP + protocollo personalizzato per i pacchetti critici per la consegna è magico sulla maggior parte dei giochi è che, ci sono momenti in cui potrebbe essere "okay" se si perde un pacchetto (solo per es. eventi secondari non critici da completare gioco), ci sono anche momenti in cui il suo "non va bene" per perdere alcuni dati per es. movimento del cursore ecc., (non faccio sviluppo di giochi per vivere, quindi perdoni i miei esempi vaghi.)

UDP non perde tempo a spingerli ancora e ancora, per impostazione predefinita.

E, molti giochi sembrano incidentalmente avere i pacchetti "okay per perdere a volte" più di "sempre bisogno di consegnare senza fallire" i pacchetti. Quindi, fare una scelta naturale per questo compito.

Tutto ciò che era necessario su UDP era usare un protocollo personalizzato che aiutasse a consegnare correttamente i pacchetti "sempre necessario consegnare senza errori", lasciando il resto dei dati di gioco alla mercé della connessione di rete.

Ora decidere quale tipo di traffico costituisce la maggior parte dei tuoi dati da trasmettere ti aiuterà a decidere meglio.

Il punto contro TCP sarebbe che il tempo speso per i tentativi potrebbe essere speso per l'invio di pacchetti che contano ORA.

C'è anche la possibilità che, in caso di problemi durante la trasmissione, TCP possa sovrapporsi a uno scenario di gioco più suddiviso per l'utente, rovinandone l'esperienza rispetto a UDP + Stack personalizzato. (Quest'ultima parte è solo intuizione , lascerò questo ad altri esperti qui per commentare questo, mi piacerebbe conoscere le possibilità di questo scenario).

    
risposta data 14.02.2017 - 20:09
fonte

Leggi altre domande sui tag