Sto lavorando su un sistema di entità per un gioco in rete e sto assegnando a ciascuna entità un ID intero a 32 bit univoco che posso usare per serializzare i riferimenti alle entità e alle entità stesse.
Attualmente sto solo incrementando un contatore ogni volta che viene creata un'entità. Suppongo che gli ID finiranno per esaurirsi, ma non mi aspetto davvero di avere 4 miliardi di entità. Inoltre, questo evita il problema se l'entità n. 5 viene distrutta e otteniamo un ID di 5. È inteso fare riferimento al nuovo n. 5 o al vecchio n. 5 eliminato?
Il problema è che non sono sicuro di come gestire / evitare le collisioni. Attualmente, se un client riceve un aggiornamento per un'entità con un ID superiore al suo attuale "ID libero", supera semplicemente il suo ID libero fino a quello passato. Ma questo non sembra molto robusto.
Ho pensato forse di assegnare intervalli a ciascun client in modo che possano allocare entità senza conflitti (diciamo che i primi n bit sono il numero del giocatore) ma sono preoccupato di cosa succede se gli intervalli hanno iniziato a sovrapporsi nel tempo.
C'è un modo migliore di gestirlo? Dovrei anche preoccuparmi degli ID che traboccano o superano la fine dell'intervallo consentito? Potrei aggiungere codice per rilevare questi casi, ma cosa farebbe se accadessero oltre all'arresto anomalo.
Un'altra opzione è quella di utilizzare qualcosa con una maggiore possibilità di essere unico come un GUID a 128 bit, ma sembra davvero pesante per un gioco che sta cercando di ridurre al minimo il traffico di rete. Inoltre, realisticamente non avrei mai avuto bisogno di più entità contemporaneamente, quindi mi sarei inserito in un numero intero a 32 bit o addirittura a 24 bit.
Grazie!