Ini terkait dengan Kinerja MMO kecuali pertanyaan itu adalah tentang bandwidth. Ini tentang beban cpu.
Saya mengumpulkan FPS sederhana menggunakan node.js dan webGL. Ini sangat sederhana, sangat mirip dengan klon BuddyMaze dari MIDI Maze. Sangat sedikit yang terjadi, semua orang bergerak dalam dua dimensi (tanpa ketinggian), menembakkan proyektil sederhana, dan berlari ke dinding.
Saat ini, jika saya membuat beberapa koneksi ke server di mana setiap pemain menembak dengan cepat sambil berputar, saya bisa mendapatkan sekitar 15 - 20 pemain dalam permainan sebelum server memaksimalkan inti dan memperlambat jalan. Dan ini adalah saat dijalankan pada 30 fps di server. Pada 10 fps, saya mendapatkan sekitar 25 - 30 koneksi. Ini sangat buruk, karena gim ini akan memiliki banyak hal yang harus dilakukan segera dan saya harus menyesuaikan lebih banyak pemain agar ini menjadi usaha yang layak.
Saudaraku baru saja menunjukkan beberapa statistik tentang server TF2 rekan kerjanya. Servernya memiliki spesifikasi lebih rendah daripada server kami, namun menjalankan TF2, jelas permainan yang jauh lebih kompleks, dengan kecepatan 500 kutu per detik, dengan 36 pengguna per inti. Selain itu, kami saat ini mengkonsumsi bandwidth jauh lebih banyak daripada yang mereka lakukan, tetapi kami belum mencoba untuk menurunkannya sebanyak itu.
Bagaimana ini mungkin? Trik macam apa yang ada untuk meningkatkan kinerja server sebesar ini? Beberapa hal yang saya ketahui meliputi:
- Menurunkan framerate di server, dan menginterpolasi posisi pada klien. Saya mendapat beberapa manfaat, tetapi jelas server TF2 bahkan tidak repot dengan ini.
- Melakukan hal-hal mahal seperti deteksi tabrakan pada klien, dan verifikasi jarang di server. Saya belum memindahkan ini dulu, saya akan malam ini. Meski begitu saya tidak mengharapkan keuntungan sebesar itu.
- Pecah lapangan bermain menjadi daerah (pohon quad) untuk meminimalkan perhitungan. Belum punya kesempatan untuk ini.
- Saya telah mempertimbangkan kemungkinan yang tidak menguntungkan bahwa node.js jauh lebih lambat daripada TF2 apa pun yang digunakan, dan mungkin tidak cocok untuk tugas intensitas tinggi semacam ini.
- Apakah itu semua ada di konfigurasi sihir server?
Jadi apa saja trik lain dari industri untuk melakukan hanya minimum yang diperlukan pada server tetapi masih memiliki pengalaman permainan yang sempurna? Ada konflik besar antara "menunda klien untuk menghemat waktu CPU" dan "tidak mempercayai klien", jadi mungkin ada baiknya mengetahui di mana garis ditarik dalam berbagai situasi?
Memperbarui
Benar-benar profil adalah satu-satunya mantra yang pernah saya temukan yang benar-benar sempurna. Saya dengan cepat membungkus beberapa fungsi pengaturan waktu di sekitar kode saya (terima kasih, FP!) Dan menemukan apa yang tidak pernah saya duga: tindakan menyiarkan data ke akun klien selama hampir semua waktu eksekusi. Secara khusus, sekitar 90% darinya. Pengujian lebih lanjut menunjukkan bahwa saat ini tergantung pada jumlah klien dan ukuran data, tetapi yang terakhir. Pada 20 pengguna memuat, saya memotong waktu siaran saya 90%, dari 24 ms menjadi lebih dari 2 ms dengan mengirimkan hanya "{}" bukan data lengkap. Tetapi dengan hanya 5 pengguna, penyiaran membutuhkan sekitar 0,5 ms. Jadi saya jelas perlu melakukan beberapa optimasi di sini.
Peningkatan paling jelas pertama adalah line of sight checking. Ini akan mengurangi jumlah orang yang peduli tentang data, dan juga jumlah data yang dikirim ke pihak yang berkepentingan. Apakah ada trik lain di bidang ini yang bisa saya coba, yang fokus pada meminimalkan biaya operasi siaran saya?