Tôi đang làm việc trên một hệ thống thực thể cho một trò chơi được nối mạng và tôi đang gán cho mỗi thực thể một id số nguyên 32 bit duy nhất mà tôi có thể sử dụng để tuần tự hóa các tham chiếu đến các thực thể và chính các thực thể.
Hiện tại tôi chỉ tăng một bộ đếm mỗi khi một thực thể được tạo. Tôi đoán các id cuối cùng sẽ hết nhưng tôi thực sự không mong đợi có 4 tỷ thực thể. Ngoài ra, điều này cũng tránh được vấn đề nếu thực thể số 5 bị phá hủy và chúng tôi nhận được id là 5. Có nghĩa là đề cập đến số 5 mới hoặc số 5 cũ đã bị xóa?
Vấn đề là tôi không chắc chắn cách xử lý / tránh va chạm. Hiện tại nếu một khách hàng nhận được bản cập nhật cho một thực thể có id cao hơn "id miễn phí" hiện tại thì nó chỉ vượt qua id miễn phí để vượt qua nó. Nhưng điều đó dường như không mạnh mẽ.
Tôi đã nghĩ về việc có thể gán phạm vi cho từng khách hàng để họ có thể phân bổ các thực thể mà không xung đột (giả sử các bit n hàng đầu là số người chơi) nhưng tôi lo lắng về những gì sẽ xảy ra nếu phạm vi bắt đầu chồng chéo theo thời gian.
Có cách nào tốt hơn để xử lý này? Tôi thậm chí có nên quan tâm đến việc id tràn hay đi qua cuối phạm vi được phép không? Tôi có thể thêm mã để phát hiện những trường hợp này nhưng nó sẽ làm gì nếu chúng xảy ra ngoài sự cố.
Một lựa chọn khác là sử dụng thứ gì đó có cơ hội duy nhất cao hơn như GUID 128 bit nhưng điều đó dường như thực sự nặng nề đối với một trò chơi đang cố gắng giảm thiểu lưu lượng mạng. Ngoài ra, thực tế tôi sẽ không bao giờ cần nhiều thực thể cùng một lúc sau đó sẽ phù hợp với số nguyên 32 bit hoặc thậm chí 24 bit.
Cảm ơn!