Hãy tưởng tượng một bảng nhiều người có thể vẽ cùng một lúc. Để giữ cho nó đơn giản, cho phép nói rằng có một đối tượng duy nhất trên bảng trắng có thể được di chuyển hoặc xóa bởi bất kỳ người dùng nào. Không có khái niệm về các đối tượng thuộc sở hữu của người dùng (nghĩa là mọi người dùng đều được phép thao tác bất kỳ đối tượng nào ... đó là một bảng trắng miễn phí)Điều kiện đua bảng nhiều người chơi
Vấn đề của tôi là ... nếu hai người dùng cố gắng thực hiện một hành động khác nhau trên đối tượng cùng một lúc, tức là một hành động xóa nó sẽ di chuyển nó, điều gì sẽ xảy ra?
Ngay bây giờ, chỉ để cho phép các tin nhắn đi qua, nó hoàn toàn bất ngờ.
Một ý tưởng là có quyền kiểm soát máy chủ để giải quyết ai có quyền kiểm soát đối tượng và không có gì được phép xảy ra cho khách hàng cho đến khi xung đột đó được giải quyết. Giải quyết xung đột có thể dựa trên cơ sở ai đến trước được phục vụ trước.
Mặc dù điều này có thể xảy ra rất nhanh, nhưng độ trễ nhỏ (~ 50-300ms) là không thể chấp nhận được vì chuyển động phải ngay lập tức ở phía máy khách. Ví dụ, thay vì thao tác các đối tượng, hãy nghĩ đến một cây bút. Để có một sự chậm trễ cho đến khi họ đã bắt đầu vẽ ... không tốt!
Một ý tưởng khác là có nút "yêu cầu kiểm soát", yêu cầu phần mở rộng serverside kiểm soát .... giống như trước đây, nhưng giờ đây chúng không bị thất vọng bởi độ trễ ban đầu của bản vẽ bút. Đây cũng không phải là tốt như vậy mặc dù kể từ khi họ phải nhấn nút đó cho đến khi họ có thể làm bất cứ điều gì, và bảng này thực sự có nghĩa là cho trẻ em ...
Bất kỳ giải pháp nào khác? :)
Tôi thích cách bạn đã chỉ ra rằng xung đột chỉ tồn tại đối với các thay đổi đặc tính cụ thể! tức là màu sắc và vị trí không phải là xung đột, nhưng vị trí và vị trí hoặc xóa là ... – davidkomer
Tôi đoán mức đơn giản nhất, tôi có thể duy trì lịch sử và "nhảy lùi và cấm kiểm soát" nếu máy chủ đưa ra thông điệp của đối tượng -locked ... – davidkomer
một giải pháp xung đột đơn giản với thao tác tương tự thuộc tính sẽ là thời gian tương tác người dùng và duy trì thay đổi mới nhất (hoặc nếu đối tượng bị xóa chỉ giữ nó bị xóa) – dain