1 poin oleh GN⁺ 2024-11-24 | 1 komentar | Bagikan ke WhatsApp

Model jaringan

  • Model jaringan Quake 3 adalah bagian paling elegan dari engine-nya, menekankan bahwa di lingkungan yang cepat, informasi yang tidak diterima pada pengiriman pertama tidak layak dikirim ulang.
  • Menggunakan UDP/IP, dan tidak memakai transmisi andal TCP/IP karena menimbulkan latensi.
  • Stack jaringan diperluas menjadi dua lapisan yang saling eksklusif: enkripsi menggunakan kunci yang dibagikan sebelumnya dan kompresi menggunakan kunci Huffman yang telah dihitung sebelumnya.
  • Yang menonjol adalah sistem di sisi server yang meminimalkan ukuran datagram UDP sambil mengompensasi kurangnya keandalan UDP.

Arsitektur

  • Sisi klien sederhana; pada setiap frame, klien mengirim perintah ke server dan menerima pembaruan status game.
  • Server harus menyebarkan status game master ke setiap klien, sambil mempertimbangkan kehilangan paket UDP.
  • Tiga elemen utama: status game master, pengiriman perintah klien melalui Netchannel, dan snapshot yang menyimpan 32 status game terbaru dalam array melingkar.

Sistem snapshot

  • Saat server mengirim pembaruan ke klien, server selalu menyalin status game master ke slot riwayat berikutnya milik klien lalu membandingkannya dengan snapshot lain.
  • Jika tidak ada snapshot yang valid, "dummy snapshot" digunakan untuk menghasilkan pembaruan penuh.
  • Jika klien mengonfirmasi bahwa pembaruan sebelumnya telah diterima, hanya pembaruan parsial yang dikirim.
  • Bahkan jika paket hilang, proses yang sama tetap diikuti, dengan mengirim informasi yang sebelumnya belum diterima dan informasi baru dalam satu pesan.

Ketahanan memori dan C

  • Quake3 membandingkan snapshot tanpa introspection, dan posisi setiap field telah dikonfigurasi sebelumnya melalui array dan direktif preprocessor.
  • Menggunakan struktur netField_t untuk mendefinisikan posisi dan ukuran field, lalu mengirim perbedaannya melalui jaringan.

Pra-pemecahan

  • Modul NetChannel membagi pesan menjadi chunk 1400 byte sebelum dikirim, untuk mencegah router melakukan fragmentasi paket.
  • Fragmentasi router mahal karena memblokir paket saat memasuki jaringan, dan saat meninggalkan jaringan harus menunggu semua fragmen.

Pesan andal dan tidak andal

  • Sistem snapshot mengompensasi datagram UDP yang hilang di jaringan, tetapi beberapa pesan dan perintah tetap harus dipastikan terkirim.
  • Jaminan ini diabstraksikan melalui NetChannel.

1 komentar

 
GN⁺ 2024-11-24
Komentar Hacker News
  • Artikel ini sangat menarik, begitu juga artikel-artikel sebelumnya. Namun, pekerjaan saat ini membosankan sehingga tidak ada energi tersisa untuk proyek hobi.
  • Saya pertama kali mendengar istilah "Isochronous" saat FireWire muncul, dan istilah itu disebut dalam pembenaran penggunaan UDP. Ini adalah bagian penting dalam spesifikasi USB/Thunderbolt saat ini.
  • Tautan ke artikel pertama dalam seri ini: https://fabiensanglard.net/quake3/index.php
  • Prediksi dan koreksi latensi menarik, dan tidak menggunakan operational transform (OT) yang kompleks. Ini lebih sederhana, membutuhkan status bersama yang menjadi sumber kebenaran independen alih-alih dokumen pengeditan kolaboratif, serta lebih cepat dikembangkan dan berkinerja lebih baik.
  • Kode jaringan klien Q3A asli bekerja dengan baik di LAN, tetapi sensitif terhadap latensi saat bermain jarak jauh. Salah satu perubahan menarik di Quake Live adalah kode jaringan yang diperbarui untuk permainan jarak jauh. Koneksi internet juga secara umum membaik seiring waktu.
  • Sepertinya situs itu sedang mengalami HN Hug of Death: <koneksi habis waktu>
  • Ini tulisan yang enak dibaca sambil menyeruput matcha perlahan pada Sabtu pagi. Salah satu kesenangan kecil dalam hidup.
  • T: Apakah ada sumber untuk mempelajari pendekatan modern terhadap protokol game real-time?
  • Mungkin nomor ID snapshot juga dikirim ke klien untuk dikonfirmasi?
  • Apakah masih ada middleware open source yang benar-benar andal?