2011-08-24 35 views
16

Tôi đang lên kế hoạch tạo ra một trò chơi chiến lược thời gian thực dựa trên WebGL, nơi người chơi có thể chơi cùng nhau. Tôi sẽ sử dụng Node.js để tạo máy chủ trò chơi và các ổ cắm web cho các kết nối thời gian thực.Strategy Game Server Concept

Tôi đã phá vỡ suy nghĩ của mình về khái niệm tốt nhất để đồng bộ hóa khách hàng là gì.

Một khả năng là chỉ gửi các đơn đặt hàng của người dùng (đơn vị chuyển động, tòa nhà, v.v ...) đến máy chủ, gửi chúng tới tất cả các khách hàng khác. Nhưng ở đây, tôi có vấn đề về sự chậm trễ. Tôi nghĩ rằng các trò chơi sẽ nhận được async theo cách này.

Một khả năng khác là tính toán trò chơi trên máy chủ. Khách hàng vẫn gửi hướng dẫn đến máy chủ nhưng máy chủ gửi ngay tất cả trạng thái đã thay đổi của tất cả các đơn vị & tòa nhà cho khách hàng trong một khoảng thời gian cao. Vấn đề ở đây là số lượng dữ liệu cao và tốc độ này có thể ...

Bạn có một số ý tưởng khác hoặc đề xuất cải tiến không?

Cảm ơn!

Trả lời

20

Về cơ bản, bạn phải quyết định giữa tốc độ so với bảo mật.

Để khách hàng thực hiện công việc và tính toán nhanh hơn nhưng dữ liệu có nguy cơ vì khách hàng có thể thao tác dữ liệu.

Mặt khác, việc máy chủ thực hiện tất cả công việc chậm hơn nhưng dữ liệu an toàn hơn.

Bạn có thể lựa chọn phương pháp kép, quyết định cho phép khách hàng chỉ tính toán một số dữ liệu, đồng bộ hóa và sau đó kiểm tra tính hợp lệ của nó và để phần còn lại được thực hiện trên máy chủ.

Nó cũng phụ thuộc vào tốc độ của trò chơi chạy, số lượng dữ liệu để tính toán, tốc độ của máy chủ và ban nhạc/kết nối, vv ...

Bạn nên chế tạo thử nghiệm cả hai phương pháp và thử một số xét nghiệm để thi đua máy khách và máy chủ tải.

Nếu trò chơi nhỏ, tôi sẽ chọn không cho một công việc phía máy chủ hơn. Mặt khác, đối với một trò chơi phức tạp, có lẽ việc chia sẻ nhiều công việc hơn cho khách hàng là tốt nhất. Dù sao tôi nghĩ rằng một sự cân bằng là luôn luôn cần thiết.

Dưới đây là một số liên kết có thể hữu ích

Multiplayer Game Programming Introduction

Real time strategy networking

Multiplayer Programming thread (old but still with many useful links)

Lag Compensation

Prevent Multiplayer Cheating

Liên kết đầu tiên đã giúp tôi rất nhiều trở lại trong những ngày và imho vẫn là một trong những nguồn tài nguyên tốt nhất avaiable về chủ đề này.

Sách

Multiplayer Game Programming

1

Thật không may là tôi không có kinh nghiệm về các trò chơi trực tuyến dựa trên WebGL, nhưng thường thì đó là cách tiếp cận tốt để cho phép logic trò chơi được thực hiện ở phía máy khách và đồng bộ hóa kết quả.

Trong phương pháp này, điều quan trọng là phải theo dõi đối tượng trò chơi nào được "sở hữu" bởi khách hàng nào. Khách hàng chỉ gửi các bản cập nhật (tạo, cập nhật, xóa) từ các đối tượng của chính họ và nhận các bản cập nhật của các đối tượng trò chơi khác từ các máy khách khác.

Ngoài ra, bạn có thể thiết lập khung thông báo để gửi các tin nhắn bổ sung như "Người chơi đã nhập/rời" hoặc nội dung tương tự.

Khái niệm này đã chứng minh hữu ích cho trò chơi tôi đã tạo và tôi hy vọng nó hữu ích cho bạn.

0

Không chắc về WebGL, nhưng cách tiếp cận sau hiểu biết của tôi sẽ được tốt.

  1. Khởi tạo tất cả các đối tượng (mà là phổ biến khắp người chơi) trên máy chủ và chạy chúng
  2. Mở đầu khách hàng, nó sẽ yêu cầu tất cả các renderer (liên quan đến khách hàng cụ thể) cho các đối tượng đang chạy trên máy chủ.
  3. ứng dụng khách sẽ hiển thị đối tượng trên giao diện người dùng cho tất cả trình kết xuất đã nhận.
  4. Khi khách hàng thực hiện bất kỳ cập nhật nào trên giao diện người dùng, các thay đổi sẽ được thông báo cho máy chủ và máy chủ sẽ cập nhật đối tượng
  5. Khi các đối tượng phổ biến giữa người chơi được sửa đổi bởi một người chơi, mỗi người chơi (khách hàng) sẽ được thông báo để tạo giao diện người dùng thay đổi.

Cách tiếp cận này sẽ dành riêng cho các đối tượng chung không phải là đối tượng cụ thể của giao diện người dùng/khách hàng.

1

Bạn nên có tình trạng trò chơi và logic trên máy chủ , nếu không trò chơi của bạn rộng mở để gian lận. Máy chủ là cơ quan cuối cùng trạng thái trò chơi.

0

Vì lý do bảo mật, tất cả logic nên ở phía máy chủ và tất cả cập nhật dữ liệu đều nằm trên máy chủ.

Nhưng khách hàng có thể dự đoán một số logic và hoạt ảnh trước, được gọi là dự đoán của khách hàng.

Phía máy chủ chịu trách nhiệm xác minh logic máy khách, nếu không có gian lận, tất cả được thực hiện. Nếu có ai đó gian lận, máy chủ có thể yêu cầu khách hàng quay lại trạng thái đúng.

Nếu bạn đang sử dụng node.js cho máy chủ, có một khung nguồn mở, pomelo. Và đó cũng là bản giới thiệu mã nguồn đầy đủ và bản demo trực tuyến cho nó: lordofpomelo

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