2011-08-20 25 views
5

Tôi đang làm việc trên một dự án để tìm hiểu node.js và đang tìm kiếm một số đề xuất về cách xử lý đồng bộ hóa dữ liệu người dùng trong thời gian thực .Đề xuất mẫu thiết kế để đồng bộ hóa dữ liệu nhiều người dùng trong trò chơi trực tuyến trong thời gian thực

Giả sử bạn có bản đồ hình chữ nhật 2D (khoảng 600x400), với một số người chơi chiếm vị trí x, y trên bản đồ đó. Mỗi người dùng có thể điều hướng xung quanh bằng các phím mũi tên và tương tác với những người khác theo một số cách cơ bản. Do điều này sẽ được phát qua HTTP, mẫu thiết kế tốt nhất về mặt xử lý và đồng bộ hóa dữ liệu người dùng là gì để mang đến trải nghiệm mượt mà nhất, hấp dẫn nhất?

tôi có thể nghĩ ra một vài lựa chọn, nhưng sẽ đánh giá cao một số ý tưởng hơn/làm rõ:

  1. Khách hàng gửi dữ liệu vị trí để máy chủ, máy chủ phân phối tất cả các vị trí cho tất cả các khách hàng, màn hình được trả lại với kết quả. Nói lại. Nhược điểm sẽ được rằng phía khách hàng bị tụt hậu bởi thời gian cần cho một chuyến đi vòng dữ liệu, nhưng ngược lại là chúng được đồng bộ hóa với tất cả người dùng.

  2. Khách hàng hiển thị nơi nó cho là liên tục, gửi dữ liệu vị trí đến máy chủ, máy chủ phân phối tất cả các vị trí cho tất cả khách hàng và sau đó hiển thị màn hình từ dữ liệu máy khách. Upside là một phản ứng nhanh hơn, nhược điểm là một chút mất đồng bộ.

  3. Sự pha trộn của hai, nhưng thay vì sử dụng tọa độ (x, y), chúng tôi sử dụng vectơ [x/y và thời gian trước đó, x/y và thời gian hiện tại, x/y được đề xuất tại khoảng thời gian ] mà sau đó có thể được sử dụng để vẽ các đường dẫn chiếu liên tục thay đổi. Có vẻ như điều này sẽ khó thực hiện.

Mọi con trỏ?

+0

sử dụng socket.io để liên lạc – Alfred

Trả lời

5

Hầu hết các trò chơi đều sử dụng một số hình thức tử hình http://en.wikipedia.org/wiki/Dead_reckoning cho phép cập nhật chậm được phân phối từ máy chủ nhưng vẫn giữ một số ảo ảnh về cập nhật thời gian thực trên máy khách. Tùy chọn tốt nhất là 3. Nó không đặc biệt phức tạp - chỉ cần theo dõi nơi bạn mong đợi mỗi diễn viên dựa trên cơ chế của trò chơi và khi bạn nhận được bản cập nhật từ máy chủ, bạn sẽ đưa hai trạng thái vào theo thời gian .

Nếu bạn thấy máy chủ gửi cho bạn trạng thái quá xa trạng thái mà khách hàng của bạn giả định (quá xa cần được xác định) thì bạn có thể chuyển sang trạng thái máy chủ và chấp nhận gián đoạn trên máy khách.

+0

Yup, tôi cũng sẽ làm như vậy. Tùy thuộc vào định dạng chuyển dữ liệu của bạn, sự gián đoạn hiếm khi đáng chú ý. Vui lòng cho tôi biết bạn đang sử dụng ổ cắm và không bỏ phiếu ... – landons

+0

ngay cả khi bạn đang sử dụng socket.io bạn đang dựa vào bỏ phiếu cho hầu hết người dùng, ổ cắm web chỉ được bật trên một số ít trình duyệt. –

+0

@Ricardo: Bằng cách sử dụng Websockets (http://caniuse.com/websockets) và các sự kiện do máy chủ gửi (http://caniuse.com/eventsource), anh ta sẽ có thể đẩy dữ liệu tới hầu hết các khách hàng mà không cần bỏ phiếu - chỉ những người dùng IE sẽ phải sử dụng bỏ phiếu. –

Các vấn đề liên quan