Ho una domanda su UDP. Per il contesto, sto lavorando a un gioco d'azione in tempo reale.
Ho letto un po 'delle differenze tra UDP e TCP e sento di capirle abbastanza bene, ma c'è un pezzo che non si è mai sentito corretto, che è affidabilità e riconoscimenti specifici . Comprendo che UDP non offre affidabilità per impostazione predefinita (ovvero i pacchetti possono essere eliminati o arrivare fuori servizio). Quando è richiesta una certa affidabilità, la soluzione che ho visto (che ha senso concettualmente) è utilizzare i riconoscimenti (ovvero il server invia un pacchetto al client e quando il client riceve quel messaggio, invia un riconoscimento al server) .
Cosa succede quando viene rilasciato il riconoscimento?
Nell'esempio sopra (un server che invia un pacchetto a un client), il server gestisce la potenziale perdita di pacchetti rinviando i pacchetti ogni frame fino a quando non vengono ricevuti riconoscimenti per quei pacchetti. Potresti ancora imbatterti in problemi di larghezza di banda o messaggi fuori servizio, ma puramente dal punto di vista della perdita di pacchetti, il server è coperto.
Tuttavia, se il client invia un riconoscimento che non arriva mai, il server non avrebbe altra scelta che interrompere infine l'invio di quel messaggio, che potrebbe interrompere il gioco se fossero necessarie le informazioni contenute in quel pacchetto. Potresti adottare un approccio simile al server (ovvero continuare a inviare riconoscimenti fino a quando non ricevi un ack per l'ack?), Ma quell'approccio ti farebbe andare avanti e indietro per sempre (dal momento che avresti bisogno di un ack per il ack per il ack) e così via).
Sento che la mia logica di base è corretta qui, il che mi lascia con due opzioni.
- Invia un singolo pacchetto di riconoscimento e spera per il meglio.
- Invia una manciata di pacchetti di riconoscimento (forse 3-4) e spera per il meglio, supponendo che non tutti verranno eliminati.
C'è una risposta a questo problema? Sto fondamentalmente fraintendendo qualcosa? C'è qualche garanzia sull'uso di UDP di cui non sono a conoscenza? Mi sento titubante ad andare avanti con troppo codice di rete finché non mi sento a mio agio che la mia logica è solida.