Kỹ thuật, thuật toán và tài nguyên MMO để giữ băng thông thấp?


9

Có tài nguyên và tài liệu nào về cách các MMO hiện tại xử lý dữ liệu hành động và chuyển động từ quá trình nén sang xử lý trên máy khách không? Bất kỳ tài nguyên cho các thuật toán dự đoán chuyển động?

Tôi đặc biệt quan tâm đến những người có chuyển động wsad và tập trung vào việc giữ độ trễ thấp Ngoài ra tốc độ và kích thước gói cho các loại MMO khác nhau (mạng khôn ngoan) là gì?

Có cách nào để chia tỷ lệ tốc độ gói hoặc hoàn toàn vô hiệu hóa một số gói nếu người chơi không thể tiếp cận hoặc trong trường hợp sau đó nhìn thấy chúng?

Câu trả lời:


9

Chà, có cuốn sách này - hiện đã hơi cũ và tôi chưa bao giờ thực sự đọc nó, nhưng nó là của một nhà xuất bản có uy tín. Tôi cũng tìm thấy cái này , cái mới hơn, nhưng tôi chưa bao giờ nghe nói trước đây. Cả hai đều tuyên bố bao gồm các vấn đề phát triển trò chơi MMO (hoặc ít nhất là trực tuyến); điều đó nói rằng, dự đoán phía khách hàng ít nhiều giống nhau bất kể quy mô của cơ sở người chơi đồng thời của bạn và Google có nhiều thông tin về nó .

Điều quan trọng là phải nhận ra rằng từ góc độ thực tế, thật khó để một nhà phát triển độc lập / sở thích kết hợp một trò chơi đủ phổ biến để thậm chí thu hút đủ người chơi để đạt được mức đồng thời cao nhất về mặt lý thuyết đủ cao để được coi là "đồ sộ". Nhưng các kỹ thuật vẫn có thể mang tính giáo dục để nghiên cứu.

Có hai cách phân loại chính về những điều bạn có thể làm:

  • Hãy tích cực về việc chỉ gửi số lượng dữ liệu tối thiểu đến nhóm khách hàng tối thiểu cần nó.
  • Thiết kế một trò chơi không khuyến khích người chơi đóng cục quá nhiều, giúp bạn giữ được "nhóm khách hàng cần" nói chung.

Cái thứ hai thực sự là một vấn đề về thiết kế trò chơi và thao túng xã hội - nó đặc biệt khó khăn vì các trò chơi nhiều người chơi có tính xã hội tự nhiên, đó là một phần của sự hấp dẫn của họ, vì vậy bạn không muốn làm nản lòng quá nhiều người chơi. Mặt khác, một trò chơi mà tất cả mọi người trên thế giới đang sinh ra cắm trại, một anh chàng đánh rơi những chiến lợi phẩm tốt nhất trong trò chơi sẽ rất khó để mở rộng quy mô.

Đối với tùy chọn đầu tiên, bạn có thể xem xét thực hiện nhắn tin theo cấp bậc - có một số điều về những người chơi khác luôn quan trọng cần biết, chẳng hạn như vị trí. Nhưng những thứ khác, chẳng hạn như sức khỏe, có thể không quan trọng đối với các đối tượng mà người chơi hiện tại chưa thể nhìn thấy, vì vậy bạn chuyển những gì bạn gửi cho người chơi đó dựa trên khoảng cách tương đối của tất cả các thực thể khác trong vùng lân cận của mình - điều này về cơ bản là điều tiết dữ liệu bạn gửi, như bạn đã đề cập trong phần cuối của câu hỏi, cũng như lọc nó.

Kiến trúc nhiều người chơi ở quy mô rất lớn cũng sẽ đệm các báo cáo không cần phải thực hiện ngay lập tức. Tin nhắn lưu ký tự được gửi đến máy chủ có thể được thực hiện trong vùng đồng bằng, chỉ cập nhật đầy đủ tại các điểm quan trọng và những cập nhật này có thể được lưu vào máy chủ điều chỉnh để chúng được gửi đến máy chủ thực sự giữ dữ liệu ký tự ổn định, thời trang định kỳ - khi quy mô cơ sở trình phát của bạn, bạn phải lo lắng về việc tối ưu hóa IO đĩa cũng như lưu lượng mạng. Bạn không muốn làm cho cơ sở dữ liệu nhân vật của bạn bị phá hủy.

Tốc độ và kích thước gói khác nhau từ trò chơi này sang trò chơi khác, giống như đối với các trò chơi không phải MMO. Đó thực sự là một điều rất cụ thể theo yêu cầu và không có tiêu chuẩn chung chung.


1
Ngoài ra còn có phần tiếp theo của cuốn sách đầu tiên (Phát triển trò chơi nhiều người chơi 2). Theo ý kiến ​​của tôi, đây không phải là một bộ sách hữu ích khủng khiếp (nó chắc chắn không phải là một cuốn sách bắt đầu hoàn thành MMO-in-x-giờ như hầu hết các cuốn sách dành cho nhà phát triển trò chơi), nhưng nó thảo luận về một số vấn đề lý thuyết hỏi trong câu hỏi này Và có lẽ nó sẽ hữu ích hơn với những người đã phát triển MMO một phần.
Ricket

5

Ngoài câu trả lời trên, hãy đọc TCP_NODELAY và cách mở rộng cửa sổ hoạt động. Hiểu chi tiết về TCP (và có, bạn muốn sử dụng TCP chứ không phải UDP trừ khi triển vọng xử lý các cập nhật khác biệt xảy ra theo thứ tự nghe có vẻ thú vị với bạn) và việc truyền lại là rất quan trọng đối với việc kiểm soát độ trễ.


4
Tôi sẽ nhắc lại rằng nếu bạn đang sử dụng các bản cập nhật khác biệt (thường là khác biệt nhị phân của các cấu trúc trong trò chơi) và bạn sử dụng bất cứ thứ gì với việc giao hàng không theo thứ tự (đáng tin cậy hay không), bạn sẽ hối tiếc. Những người không thích TCP trong chơi game thường không biết đủ về nó (chẳng hạn như biết NODELAY làm gì). UDP có ý nghĩa đối với những thứ như dữ liệu giọng nói, trong đó các gói không theo thứ tự có thể bị bỏ đi, điều này hiếm khi xảy ra trong một trò chơi.
coderanger

1
"hiếm khi xảy ra trong một trò chơi"? Với điều kiện là máy chủ sẽ cho tôi trạng thái trò chơi có thẩm quyền trong mọi khung hình, tôi không quan tâm đến những gì đã xảy ra trong quá khứ. Số khung đơn giản tăng đơn điệu từ các gói UDP là hoàn hảo cho việc này. Bao nhiêu dữ liệu bạn thực sự cần truyền tải đáng tin cậy?
ChrisE

2
"Với điều kiện là máy chủ sẽ cho tôi các trò chơi có thẩm quyền tuyên bố mọi khung hình" Chắc chắn, nếu bạn coi đó là một sự cho trước. Lưu ý rằng tôi đã nói "nếu bạn đang sử dụng các bản cập nhật khác biệt" thì điều này ngược lại với việc làm rung chuyển toàn bộ trạng thái mỗi khung hình. Trong một MMO với bất kỳ mức độ phức tạp nào đối với thế giới, nó sẽ nhanh chóng trở thành không thể gửi các bản cập nhật đầy đủ thường xuyên.
coderanger

1
Ngay cả khi gửi toàn bộ trạng thái của những thứ thay đổi, bạn sẽ gặp phải các vấn đề về giao hàng ngoài đơn hàng, nơi việc hợp nhất mọi thứ lại với nhau có thể trở nên không khả thi. Hãy nghĩ về các bản cập nhật "x = 1, y = 2" và sau đó "y = 1, z = 2". Nếu những người đến sau bạn muốn bỏ cái "đầu tiên" để giá trị của y là chính xác, nhưng sau đó bạn mất thay đổi thành x.
coderanger

1
@Adam Đó là lý do tại sao tôi nói bạn nên đọc thông số TCP và hiểu cách mở rộng cửa sổ hoạt động và cách nó tương tác với truyền lại ;-) Viết lại TCP về cơ bản luôn luôn sai, cơ hội vặn nó lên gần 100%. Nếu bạn muốn giao hàng theo thứ tự đáng tin cậy, bạn không nên sử dụng UDP.
coderanger
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.