Я працюю над системою сутності для мережевої гри і присвоюю кожному об'єкту унікальний 32-розрядний цілочисельний ідентифікатор, який я можу використовувати для серіалізації посилань на сутності та самі сутності.
В даний час я просто збільшую лічильник щоразу, коли створюється сутність. Я думаю, що ідентифікатори врешті-решт закінчуться, але я насправді не сподіваюся мати 4 мільярди осіб. Також це дозволяє уникнути проблеми, якщо об'єкт №5 знищений, і ми отримаємо ідентифікатор 5. Чи означає це посилатися на новий №5 або старий видалений №5?
Проблема полягає в тому, що я не впевнений, як впоратися / уникнути зіткнень. В даний час, якщо клієнт отримує оновлення для організації з ідентифікатором, більшим, ніж поточний "вільний ідентифікатор", він просто стикається з вільним ідентифікатором до попереднього. Але це не здається дуже надійним.
Я подумав, можливо, присвоїти діапазони кожному клієнту, щоб вони могли виділяти сутності без конфлікту (скажімо, верхні n біти - це номер гравця), але я переживаю, що станеться, якщо діапазони почали збігатися з часом.
Чи є кращий спосіб впоратися з цим? Чи варто мені навіть байдуже переповнювати ідентифікатори або проходити повз кінець дозволеного діапазону? Я можу додати код для виявлення цих випадків, але що б це зробило, якщо вони трапляються, крім краху.
Інший варіант - використовувати щось з більшими шансами на те, щоб бути унікальним, як 128-бітний GUID, але це здається дуже важким для гри, яка намагається мінімізувати мережевий трафік. Крім того, реально мені ніколи не знадобиться більше об'єктів одночасно, тоді я б вписався в 32-бітове або навіть 24-бітове ціле число.
Спасибі!