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
Komentar Hacker News