Nguyên tắc thiết kế trò chơi nhiều người chơi thời gian thực cho Node.js


12

Tôi đã đọc bài viết của Valve về kết nối nhiều người chơi , được chuyển thể từ bài báo năm 2001 của Yahn Bernier có tên Phương thức bù trừ trễ trong Thiết kế và tối ưu hóa giao thức trong trò chơi / máy chủ . Tôi đang tạo một trò chơi nhiều người chơi thời gian thực bằng máy chủ node.js được kết nối với máy khách thông qua socket.io và tôi có một vài câu hỏi liên quan đến các nguyên tắc chi tiết bên dưới:

Nội suy thực thể

[Nội suy] ngăn chặn chuyển động lộn xộn, điều này thường sẽ dẫn đến bằng cách đệm các bản cập nhật máy chủ sau đó phát lại chúng với các khoảng trống được nội suy trơn tru giữa. Nó cũng có thể bảo vệ chống lại sự cố do mất gói.

Dự đoán phía khách hàng

Dự đoán là khái niệm của khách hàng dự đoán ảnh hưởng của các hành động của người chơi cục bộ mà không cần chờ máy chủ xác nhận chúng. Trạng thái dự đoán của một thực thể được kiểm tra đối với các lệnh máy chủ khi chúng đến cho đến khi phát hiện khớp hoặc khớp sai.

Bồi thường

Lag bù là khái niệm máy chủ sử dụng độ trễ của người chơi để tua lại thời gian khi xử lý [đầu vào của người dùng], để xem người chơi đã thấy gì khi lệnh được gửi. Kết hợp với dự đoán, bù độ trễ có thể giúp chống lại độ trễ của mạng đến mức gần như loại bỏ nó khỏi tầm nhìn của kẻ tấn công.

  • Các nguyên tắc có áp dụng cho TCP như chúng làm với UDP không và có bất kỳ sự khác biệt nào trong việc triển khai không? Tôi có thể thấy rằng phép nội suy thực thể sẽ không cần phải bảo vệ chống mất gói nhưng đó là về nó.

  • Tôi thậm chí có thể giao tiếp giữa máy chủ và trình duyệt web và ngược lại bằng UDP và Node.js không?

  • Vì bài báo đã hơn một thập kỷ, những nguyên tắc này vẫn còn được sử dụng hay công nghệ khác đã xuất hiện?

Bất kì sự trợ giúp nào đều được đánh giá cao.


1
Bạn thực sự không cần UDP cho các trò chơi nhiều người chơi, trái với niềm tin phổ biến. Học từ những điều tốt nhất; WoW sử dụng TCP và tôi tin rằng nhiều trò chơi nhiều người chơi AAA khác cũng vậy. Mọi người chỉ cần làm theo lời khuyên của ai đó, và sau đó họ dành 5 tháng tiếp theo để thực hiện một phiên bản TCP xấu và chậm!
jcora

1
(Tất nhiên, trừ khi, bạn chắc chắn rằng bạn có kiến ​​thức và tài nguyên để phát triển một giao thức tốt của UDP có thể sử dụng các lợi thế của nó.)
jcora

1
Không có trò chơi FPS AAA nào sử dụng TCP. Nó thực sự là quá chậm đối với các trò chơi yêu cầu cập nhật thời gian thực. Nhưng vì anh ta không viết một trò chơi hành động, anh ta có thể thoát khỏi TCP.
Brendan Lesniak

@Yannbane Không biết rằng WoW sử dụng TCP. Có vẻ như rất nhiều MMO làm, từ những gì tôi có thể tìm thấy. Làm cho tôi tự tin hơn nhiều về việc viết các trò chơi nhiều người chơi với HTML5. Cảm ơn!
dreta

Câu trả lời:


6
  • Nguyên tắc giảm ảnh hưởng của độ trễ là như nhau bất kể giao thức vận chuyển. Mất gói là một chủ đề khác - đối với nhiều loại gói bị mất một số không quan trọng vì bản cập nhật tiếp theo có thể đã được thực hiện - ở đây, UPD có lợi thế, nhưng khi bạn cần đảm bảo một gói nhất định được gửi, bạn cần tùy chỉnh mã xác nhận để làm điều đó với UDP
  • Node.js hỗ trợ UDP, nhưng trình duyệt web thì không (không có plugin). Phương thức thời gian thực tốt nhất để liên lạc giữa hai người là Web Sockets, về cơ bản là TCP. Nhưng để giao tiếp, bạn có thể muốn sử dụng Socket.IO, cung cấp dự phòng cho các trình duyệt không hỗ trợ ổ cắm web.
  • Các nguyên tắc vẫn giữ nguyên.

1
Tôi đoán điều này đã lỗi thời - WebRTC nên là cách sử dụng giao tiếp giống như UDP, phải không?
Nikolay Tsenkov

4

Bạn nên xem bài viết này về Trò chơi nhiều người chơi trong Thời gian thực được đăng trên trang web buildnewgames.com của Sven Bergstrom, anh ấy nói về những điều tương tự và anh ấy đang sử dụng Node.JS. Tôi có một cái gì đó tương tự đi. Bây giờ tôi chỉ nghiên cứu thêm về dự đoán và nội suy phía khách hàng và tương tự như tôi trước khi cố gắng giải quyết phần còn lại của nó.

Tôi tin rằng chắc chắn có thể làm điều này với Socket.IO và Node, tuy nhiên công nghệ này vẫn còn mới nên sẽ có rất ít tài liệu và không có gì trong cách hướng dẫn thực hiện. Tôi sẽ khuyên bạn nên làm những gì tôi đang làm và nghiên cứu chủ đề rất chi tiết bằng các thuật ngữ cấp cao trừu tượng và sau đó cố gắng tự thực hiện nó.


1

Tôi tin rằng công nghệ là khá nhiều như nhau. Ngoài ra, các khái niệm không phụ thuộc vào ngôn ngữ bạn sử dụng hoặc liệu bạn thực hiện UDP hay TCP. Tôi đã viết một lời giải thích rất chi tiết về toàn bộ điều ở đây http://www.gabrielgambetta.com/fpm1.html , bao gồm các sơ đồ đẹp :)

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.