Saat ini saya sedang mengerjakan game berorientasi fisika singleplayer di mana saya ingin fisika disimulasikan di sisi server. Ini karena permainan akan memiliki papan pemimpin, perkembangan pemain yang gigih, dan sebagainya dan saya ingin mencegah segala jenis kecurangan - pada dasarnya arsitektur client-server murni, klien itu "bodoh" dan hanya menampilkan apa yang ingin ditampilkan oleh server.
Namun masalahnya adalah bahwa game tersebut kemungkinan besar akan dimainkan oleh ratusan (mungkin ribuan) orang pada saat yang bersamaan. Ini mengkhawatirkan saya, karena kemungkinan besar akan membunuh daya pemrosesan server jika saya harus melakukan dan memelihara ratusan negara pada saat yang sama.
Saya tidak akan memiliki masalah memindahkan semua simulasi fisika ke sisi klien, tetapi kemudian saya benar-benar membutuhkan cara untuk memvalidasi jika hasil simulasi klien valid. Namun, saya tidak tahu caranya.
Saya telah berpikir tentang menjalankan simulasi sisi server sesekali untuk memvalidasi jika klien masih bermain adil, tetapi saya benar-benar ingin server memiliki ketegangan sesedikit mungkin.
Fisika akan menjadi serumit demo GDC 2011 oleh Glenn Fiedler , bahkan mungkin lebih sederhana. Namun, lebih banyak benda bertubrukan kaku yang selalu bertabrakan akan berada dalam satu adegan dan mereka semua akan terlihat sekaligus.
Saya mengalami kesulitan mendapatkan jawaban untuk kasus khusus ini, karena sebagian besar sumber daya di web - lagi-lagi, situs Glenn Fiedlers menjadi yang hebat - berbicara tentang fisika jaringan skala kecil (mis. FPS dengan 30 pemain, seperti Halo).
Setiap saran, situs web, makalah atau sejenisnya tentang hal itu akan sangat dihargai.
Rekap pertanyaan yang ingin saya jawab:
- Seberapa layak model klien-server? Apakah kekhawatiran daya pemrosesan server saya sah dan membumi?
- Apakah mungkin untuk memvalidasi simulasi fisik yang dijalankan oleh klien di server dengan andal? Jika ya, bagaimana caranya?
sumber
Jawaban:
Anda dapat memvalidasi pengiriman sisi klien dari pengguna lain, dan meminta klien melaporkan ke server jika pengiriman terlihat tidak valid.
Kemudian Anda dapat mengambil tindakan (baik melarang penipu, atau melarang siapa yang memalsukan laporan palsu). Untuk memeriksa diri Anda apakah kiriman itu benar-benar tidak valid atau tidak, Anda dapat menggunakan klien khusus atau apa pun.
sumber
Game Anda adalah singleplayer, satu-satunya 'interaksi' dengan pemain lain adalah leaderbord. Anda dapat menelurkan contoh untuk memeriksa simulasi pada server Anda untuk setiap pengiriman, Anda tidak perlu semua trik untuk memastikan bahwa fisika adalah lebih dari 30 klien, jadi saya tidak berpikir Anda membutuhkan lebih banyak sumber daya daripada yang sudah Anda miliki sejak fisika sudah bekerja :).
Memeriksa setiap hasil akan sedikit berlebihan, Anda dapat mengirim simulasi yang dikompres ke server setiap kali seseorang mengirim skor ke leaderbord, kemudian hanya memeriksa skor 5% teratas di server Anda sendiri, atau mungkin bahkan 1% teratas atau bahkan lebih pintar hanya memeriksa skor tinggi baru dan menganggap semua orang tidak lebih baik dari # 1 mungkin memiliki simulasi yang tidak curang.
Saya tidak tahu apakah simulasi Anda seperti, mengatur dan tidak berinteraksi (mudah diperiksa) atau apakah pemain dapat berinteraksi dengan sim saat sedang berjalan, tetapi pastikan untuk melakukan fisika Anda sedemikian rupa sehingga mengambang berbeda representasi titik tidak mengacaukan hal-hal dan membuat tampilan lari yang valid tidak valid.
sumber
Jangan lakukan itu, saya dapat meyakinkan Anda bahwa simulasi fisika hanya pada server adalah ide yang sangat buruk. Masalah utama bukan beban server, tetapi responsif. Responsif pada klien akan sangat buruk. Pemain akan menekan tombol, maka Anda harus melakukan perjalanan pulang-pergi ke server sebelum Anda mendapatkan hasil simulasi. Saya telah melakukan variasi ini di masa lalu (kebanyakan hanya menekan tombol), dan hasilnya tidak cantik dan hanya boleh dilakukan untuk permainan yang sangat lambat yang memiliki peluang untuk lolos darinya (dan bahkan dalam kasus-kasus itu dirasakan kurangnya respons adalah masalah besar).
Skema yang lebih baik yang ingin saya coba di lain waktu skenario jenis ini muncul sendiri adalah untuk memilih pemain bagian kecil dari playerbase Anda, kemudian Anda mensimulasikan untuk mereka sisi server untuk sementara waktu dan membandingkan hasil Anda dengan mereka, tanpa sepengetahuan mereka. Jika mereka menyimpang terlalu banyak (Anda harus mengharapkan beberapa derajat divergensi), maka Anda mengklasifikasikannya sebagai curang potensial, dan terus mensimulasikan mereka untuk sementara waktu lebih lama untuk mengonfirmasi. Apa yang akan Anda dapatkan adalah semacam kurva dengan seberapa banyak pemain yang sah menyimpang dibandingkan dengan server, dipengaruhi oleh kondisi jaringan dll, dan Anda akan segera melihat bahwa curang ada di luar kurva ini. Sistem ini memiliki manfaat sebagai berikut:
sumber
Seperti yang Daniel katakan, masalah besar di sini adalah program yang melakukan aksi untuk pemain; tidak ada kemiringan fisika dalam game yang diperlukan jika pemain adalah lengan robot dengan presisi yang biasanya diselesaikan untuk bedah saraf.
sumber