Prinsip-prinsip desain game multi-pemain Realtime untuk Node.js

12

Saya telah membaca artikel Valve tentang jaringan multi-pemain yang telah diadaptasi dari makalah Yahn Bernier pada tahun 2001 yang disebut Metode Kompensasi Latensi dalam Desain dan Optimasi Protokol dalam Gim Klien / Server . Saya membuat game multi-pemain realtime menggunakan server node.js yang terhubung ke klien melalui socket.io dan saya punya beberapa pertanyaan mengenai prinsip-prinsip yang dirinci di bawah ini:

Interpolasi Entitas

[Interpolasi] mencegah gerakan gelisah yang biasanya menyebabkan buffering pembaruan server kemudian memutarnya kembali dengan celah-celah di antara keduanya. Itu juga dapat melindungi terhadap gangguan yang disebabkan oleh paket loss.

Prediksi Sisi Klien

Prediksi adalah gagasan klien yang memperkirakan efek dari tindakan pemain lokal tanpa menunggu server mengonfirmasi. Keadaan diprediksi entitas diuji terhadap perintah server saat mereka tiba sampai kecocokan atau kecocokan salah terdeteksi.

Kompensasi Lag

Kompensasi lag adalah gagasan server yang menggunakan latensi pemain untuk memundurkan waktu saat memproses [input pengguna], untuk melihat apa yang dilihat pemain saat perintah dikirim. Dalam kombinasi dengan prediksi, kompensasi keterlambatan dapat membantu memerangi latensi jaringan hingga hampir menghilangkannya dari perspektif penyerang.

  • Apakah prinsip-prinsip berlaku untuk TCP seperti yang mereka lakukan untuk UDP dan apakah akan ada perbedaan dalam implementasi? Saya dapat melihat bahwa interpolasi entitas tidak perlu melindungi terhadap kehilangan paket tetapi hanya itu saja.

  • Dapatkah saya berkomunikasi antara server dan browser web dan sebaliknya menggunakan UDP dan Node.js?

  • Karena makalah ini berumur lebih dari satu dekade, apakah prinsip-prinsip ini masih digunakan atau sudahkah teknologi lain muncul?

Bantuan apa pun akan sangat dihargai.

Yoshima
sumber
1
Anda sebenarnya tidak membutuhkan UDP untuk gim multipemain, bertentangan dengan kepercayaan populer. Belajar dari yang terbaik; WoW menggunakan TCP, dan saya percaya banyak game multiplayer AAA lainnya melakukannya. Orang-orang hanya mengikuti saran seseorang, dan kemudian mereka menghabiskan 5 bulan ke depan menerapkan versi TCP yang buruk dan lambat sendiri!
jcora
1
(Kecuali, tentu saja, Anda yakin bahwa Anda memiliki pengetahuan dan sumber daya untuk mengembangkan protokol yang layak di atas UDP yang dapat menggunakan kelebihannya.)
jcora
1
Tidak ada game AAA FPS yang menggunakan TCP. Ini terlalu lambat untuk game yang membutuhkan pembaruan waktu nyata. Tetapi karena dia tidak menulis game aksi, dia seharusnya bisa lolos dengan TCP.
Brendan Lesniak
@Yannbane Tidak tahu bahwa WoW menggunakan TCP. Sepertinya banyak MMO lakukan, dari apa yang bisa saya temukan. Membuat saya lebih percaya diri untuk menulis game multi-pemain dengan HTML5. Terima kasih!
Dreta

Jawaban:

6
  • Prinsip untuk mengurangi efek kelambatan adalah sama terlepas dari protokol transport. Hilangnya paket adalah topik lain - karena banyak jenis paket yang hilang beberapa tidak penting karena pembaruan berikutnya mungkin sudah dalam perjalanan - di sini UPD memiliki keuntungan, tetapi ketika Anda perlu memastikan paket tertentu dikirimkan, Anda perlu kustom kode pengakuan untuk melakukan itu dengan UDP
  • Node.js mendukung UDP, tetapi browser web tidak (tanpa plugin). Metode real-time terbaik untuk berkomunikasi antara keduanya adalah Web Socket, yang pada dasarnya adalah TCP. Tetapi untuk komunikasi, Anda mungkin ingin menggunakan Socket.IO, yang menyediakan fallback untuk browser yang tidak mendukung soket web.
  • Prinsipnya tetap sama.
Tapio
sumber
1
Saya kira ini sudah usang - WebRTC harus menjadi cara untuk menggunakan komunikasi seperti UDP, bukan?
Nikolay Tsenkov
4

Anda harus memeriksa artikel ini tentang Game Multiplayer Waktu Nyata dalam HTML5 yang diposting di situs buildnewgames.com oleh Sven Bergstrom, ia berbicara tentang hal yang sama dan ia menggunakan Node.JS. Saya memiliki sesuatu yang serupa dengan diri saya sendiri. Saya baru saja meneliti lebih lanjut tentang prediksi sisi klien dan interpolasi dan sejenisnya sebelum saya mencoba mengatasi sisanya.

Saya percaya itu pasti mungkin untuk melakukan hal ini dengan Socket.IO dan Node, namun teknologinya masih baru sehingga akan ada sedikit dokumentasi dan sedikit atau tidak ada sama sekali dalam cara panduan implementasi. Saya akan merekomendasikan melakukan apa yang saya lakukan dan mempelajari subjek dengan sangat rinci dalam istilah abstrak tingkat tinggi dan kemudian mencoba menerapkannya sendiri.

Cory Gross
sumber
1

Saya percaya teknologinya hampir sama. Juga, konsep-konsep tidak tergantung pada bahasa apa yang Anda gunakan atau apakah Anda melakukan UDP atau TCP. Saya telah menulis penjelasan yang sangat rinci tentang semuanya di sini http://www.gabrielgambetta.com/fpm1.html , termasuk diagram cantik :)

ggambett
sumber