Mô phỏng vật lý phía máy chủ với hàng trăm người chơi


9

Tôi hiện đang làm việc trên một trò chơi định hướng vật lý chơi đơn, trong đó tôi muốn vật lý được mô phỏng phía máy chủ. Điều này là do trò chơi sẽ có bảng dẫn, sự phát triển liên tục của người chơi, vân vân và tôi muốn ngăn chặn mọi kiểu gian lận - về cơ bản là kiến ​​trúc máy chủ-máy khách thuần túy, máy khách là một trò chơi ngu ngốc và chỉ hiển thị những gì máy chủ muốn bạn hiển thị.

Tuy nhiên, vấn đề là trò chơi nhiều khả năng sẽ được chơi bởi hàng trăm (có thể hàng ngàn) người cùng một lúc. Điều này liên quan đến tôi, vì rất có thể nó sẽ giết chết sức mạnh xử lý của máy chủ nếu tôi phải làm và duy trì hàng trăm trạng thái cùng một lúc.

Tôi sẽ không gặp vấn đề gì khi chuyển tất cả các mô phỏng vật lý sang phía máy khách, nhưng sau đó tôi thực sự cần một cách để xác nhận nếu kết quả mô phỏng máy khách là hợp lệ. Tuy nhiên, tôi không thể tìm ra cách.

Tôi đã từng nghĩ về việc chạy phía máy chủ mô phỏng thỉnh thoảng để xác thực nếu máy khách vẫn chơi công bằng, nhưng tôi thực sự muốn máy chủ có ít sức căng nhất có thể.

Vật lý sẽ trở nên phức tạp như bản demo GDC 2011 của Glenn Fiedler , thậm chí có thể đơn giản hơn. Tuy nhiên, rất nhiều cơ thể cứng nhắc luôn luôn va chạm sẽ ở trong một cảnh duy nhất và tất cả chúng sẽ được nhìn thấy cùng một lúc.

Tôi gặp khó khăn khi nhận được câu trả lời cho trường hợp cụ thể này, vì hầu hết các tài nguyên trên web - một lần nữa, trang Glenn Fiedlers là một trang tuyệt vời - nói về vật lý mạng quy mô nhỏ (ví dụ FPS với 30 người chơi, như Halo).

Bất kỳ lời khuyên, trang web, giấy tờ hoặc tương tự về chủ đề này sẽ được đánh giá rất cao.

Một bản tóm tắt các câu hỏi tôi muốn có một câu trả lời:

  • Làm thế nào khả thi là một mô hình máy khách-máy chủ? Là mối quan tâm sức mạnh xử lý máy chủ của tôi là hợp pháp và có căn cứ?
  • Có thể xác nhận một cách đáng tin cậy một mô phỏng vật lý được chạy bởi máy khách trên máy chủ không? Nếu vậy thì thế nào?

Tôi sẽ để câu hỏi này mở ra một chút nữa với hy vọng nhiều người sẽ đăng suy nghĩ của họ. Cảm ơn tôi đi ra ngoài cho những người đã đọc!
Lennard Fonteijn

Miễn là các khách hàng khác nhau là độc lập, bạn sẽ không gặp vấn đề gì khi mở rộng theo chiều ngang. Sử dụng một cái gì đó như EC2, mang lại khả năng trực tuyến khi cần thiết.
ipeet

1
Vấn đề nằm ở đâu nếu ai đó gian lận trong một trò chơi một người chơi? Hãy để họ, tốt hơn là bỏ ý tưởng bảng xếp hạng và tập trung vào việc tạo ra một trò chơi đơn vui nhộn
Maik Semder

2
"Có thể xác nhận một cách đáng tin cậy một mô phỏng vật lý được chạy bởi máy khách trên máy chủ không?" Có thể xác nhận nó, nhưng đọc bình luận của bạn dưới đây: Kế hoạch của bạn về việc đưa tiền RL cho điểm số cao nhất, và tương tự như trò chơi phi tiêu, tức là sau khi vật lý ném ban đầu tiếp quản. Vấn đề ở đây là ít để xác nhận vật lý, điều này là dễ dàng. Vấn đề là bạn sẽ có những kẻ gian lận để cho một chương trình máy tính thực hiện cú ném để cho họ điểm số hoàn hảo.
Daniel Carlsson

Vật lý được xác thực của máy chủ trong một thế giới chia sẻ là hoàn toàn có thể, DCUO là một ví dụ tốt về điều này. Xin lưu ý rằng "máy chủ" thực sự có nghĩa là "một loạt các hộp máy chủ" trong khi bạn dường như viết theo nghĩa "sever" là một hộp duy nhất ngồi ở đâu đó. Hiện tại bạn không thể mô phỏng hàng ngàn diễn viên độc lập trong cùng một không gian vật lý, do đó thiếu thảo luận về nó; những gì bạn có thể làm là trải rộng hàng ngàn người chơi ra các đảo mô phỏng độc lập không tương tác.
Patrick Hughes

Câu trả lời:


5

Bạn có thể xác thực phía khách hàng các lần gửi của người dùng khác và báo cáo khách hàng đến máy chủ nếu việc gửi có vẻ không hợp lệ.

Sau đó, bạn có thể thực hiện hành động (cấm người gian lận hoặc cấm người giả mạo báo cáo sai). Để tự kiểm tra xem bài nộp đó có thực sự không hợp lệ hay không, bạn có thể sử dụng một khách hàng đặc biệt hoặc bất cứ điều gì.


3
Đó thực sự là khá thông minh chết tiệt! Sẽ không nghĩ về điều đó, rõ ràng ít nhất 2 hoặc 3 khách hàng sẽ phải chạy mô phỏng trong trường hợp khách hàng chạy mô phỏng của người khác là gian lận - trong trường hợp đó, máy chủ luôn có thể thực hiện mô phỏng cuối cùng nếu tất cả khách hàng báo cáo điều gì đó kỳ lạ .
Lennard Fonteijn

1

Trò chơi của bạn là một người chơi đơn, 'tương tác' duy nhất với những người chơi khác là một người lãnh đạo. Bạn có thể sinh ra một ví dụ để kiểm tra một mô phỏng trên máy chủ của mình cho mỗi lần gửi, bạn không cần tất cả các thủ thuật để đảm bảo vật lý giống nhau trên 30 khách hàng, vì vậy tôi không nghĩ bạn cần nhiều tài nguyên hơn bạn đã có vật lý đã hoạt động :).

Kiểm tra mọi kết quả sẽ hơi quá mức, bạn có thể gửi mô phỏng được nén đến máy chủ bất cứ khi nào ai đó gửi điểm cho nhà lãnh đạo, sau đó chỉ kiểm tra 5% điểm cao nhất trên máy chủ của bạn, hoặc thậm chí là 1% hàng đầu hoặc thậm chí là 1% thông minh hơn chỉ kiểm tra các điểm cao mới và cho rằng tất cả mọi người không tốt hơn # 1 có thể có một mô phỏng không bị lừa.

Tôi không biết mô phỏng của bạn giống như thế nào, thiết lập và không tương tác (dễ kiểm tra) hoặc nếu người chơi có thể tương tác với sim trong khi nó đang chạy, nhưng hãy chắc chắn thực hiện vật lý của bạn theo cách nổi khác nhau biểu diễn điểm không làm rối tung mọi thứ và làm cho một lần chạy hợp lệ trông không hợp lệ.


Tôi không muốn đi sâu vào chi tiết cụ thể của trò chơi, nhưng bạn có thể so sánh trò chơi của tôi với trò chơi phi tiêu: Một khi bạn đã nhắm và thực hiện cú ném, vật lý tiếp quản và không có gì bạn có thể thay đổi về nó nữa không. Kiến thức này sẽ thay đổi câu trả lời của bạn?
Lennard Fonteijn

Không, nó sẽ không thay đổi một điều :). Chỉ cần lưu trữ replay trên máy chủ và chỉ kiểm tra những người đáng ngờ (ví dụ: điểm cao mới)
Roy T.

1

Đừng làm điều đó, tôi có thể đảm bảo với bạn rằng mô phỏng vật lý chỉ trên máy chủ là một ý tưởng rất tồi. Vấn đề chính không phải là tải máy chủ, mà là khả năng đáp ứng. Khả năng đáp ứng của khách hàng sẽ rất kém. Người chơi sẽ nhấn một nút, sau đó bạn sẽ phải thực hiện một chuyến đi khứ hồi đến máy chủ trước khi bạn nhận được kết quả mô phỏng. Tôi đã thực hiện các biến thể của điều này trong quá khứ (chủ yếu chỉ là nhấn nút) và kết quả không đẹp và chỉ nên được thực hiện cho các trò chơi rất chậm có bất kỳ cơ hội nào để thoát khỏi nó (và ngay cả trong những trường hợp đó là cảm nhận thiếu phản ứng là một vấn đề rất lớn).

Một kế hoạch tốt hơn mà tôi dự định sẽ thử vào lần tới khi loại kịch bản này xuất hiện là chọn cho người chơi một tập hợp con rất nhỏ trong cơ sở người chơi của bạn, sau đó bạn mô phỏng cho phía máy chủ của họ trong một thời gian ngắn và so sánh kết quả của bạn với họ, không có kiến ​​thức của họ. Nếu chúng bị lệch đi nhiều (bạn phải mong đợi một số mức độ khác nhau), thì bạn phân loại chúng là những kẻ gian lận tiềm năng và tiếp tục mô phỏng chúng trong một thời gian nữa để xác nhận. Những gì bạn sẽ nhận được là một số đường cong bằng cách một người chơi hợp pháp phân kỳ so với máy chủ, bị ảnh hưởng bởi các điều kiện mạng, v.v. và bạn sẽ nhanh chóng thấy rằng những kẻ gian lận nằm ngoài đường cong này. Hệ thống này có những lợi ích sau:

  • Tự động
  • Bạn không hy sinh phản ứng
  • Khi bạn chỉ mô phỏng một tập hợp con rất nhỏ trong cơ sở người chơi của mình, tải sẽ có thể quản lý được và thậm chí có thể mở rộng (có lẽ bạn chọn ít người chơi hơn để mô phỏng nếu tải cao)
  • Áp dụng cho mọi trò chơi tôi có thể nghĩ ra, vì vậy rất có thể tái sử dụng

Vì vậy, giống như Roy, về cơ bản, bạn nói: Giữ nó ở phía khách hàng, lưu trữ "phát lại" khi khách hàng gửi điểm và chỉ xác nhận các lần phát lại đó một lần (không phải tất cả, một tỷ lệ nhỏ). Điều gì sẽ xảy ra nếu dựa trên số điểm mà khách hàng nộp khoản thanh toán tín dụng được thực hiện - phần tiến trình của người chơi, tín dụng cũng có thể được mua bằng tiền thật (!!!) - bạn có còn đề xuất phương pháp này không? Nếu gian lận cung cấp số lượng tín dụng quá mức và tôi chỉ xác nhận một lần trong một thời gian, về cơ bản tôi sẽ mất tiền. Bạn có thể có thể gắn cờ một người khi điểm của anh ta vượt quá một ngưỡng nhất định, nhưng liệu có cách nào tốt hơn không?
Lennard Fonteijn

Nếu công cụ vật lý có tính xác định (cần phải có) và máy chủ mô phỏng sử dụng cùng một trạng thái bắt đầu và đầu vào như máy khách (điều này là khả thi), thì kết quả phải nằm trong giới hạn lỗi dấu phẩy động hợp lý (không đáng kể). Ngay cả khi có các hiệu ứng ngẫu nhiên và không thể vượt qua trạng thái RNG, bạn vẫn có thể vượt qua các số ngẫu nhiên và sử dụng chúng để kiểm tra (và thậm chí kiểm tra phân phối của chúng, trong trường hợp cuộn ngẫu nhiên tạo ra sự khác biệt lớn về trò chơi) .
ipeet

Các khoản tín dụng có liên quan, bạn nên kiểm tra tốt hơn mỗi lần phát lại vì gian lận không còn nằm trong danh sách cao nhất mà là để kiếm tiền. Bạn muốn bảo mật hơn rất nhiều nếu có liên quan đến tiền, tôi không thể giúp bạn ở đó.
Roy T.

@RoyT. Dù sao thì tôi cũng có thể làm điều đó, ngay cả khi tôi không thanh toán tiền dựa trên các khoản tín dụng (ai đó đã đọc sai mà tôi đoán?). Tôi dự định có một chính sách không khoan nhượng, vì vậy tôi chỉ cần bó tập tin phát lại để xác thực. Nếu nó thực sự đáng ngờ, tôi sẽ hành động.
Lennard Fonteijn

1

Như Daniel đã nói, vấn đề lớn ở đây sẽ là các chương trình thực hiện hành động cho người chơi; không cần thiết phải nghiêng vật lý trong trò chơi nếu người chơi là cánh tay robot với độ chính xác thường được giải quyết cho phẫu thuật thần kinh.


Tôi có thể đã không rõ ràng một chút. Trò chơi của tôi sẽ cấp cho bạn các khoản tín dụng ảo sau khi bạn hoàn thành trò chơi. Bạn có thể sử dụng các khoản tín dụng này để mở khóa nội dung mới để chơi. Bạn cũng có thể sử dụng tiền thật để mua tín dụng để mở khóa nội dung nhanh hơn (nhớ rằng đó không phải là Pay2Win, tôi ghét điều đó). Tôi không có ý định trả tiền thật dựa trên các khoản tín dụng. Điều đó nói rằng, phi tiêu chỉ là một phép ẩn dụ để mô tả mức độ ảnh hưởng của một game thủ đối với trạng thái của các cơ thể cứng nhắc, tôi không sợ "aimbots" vì điều đó sẽ mang lại cho bạn 0 lợi thế.
Lennard Fonteijn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.