Apakah permainan multipemain dalam JavaScript adalah ide yang buruk? [Tutup]

8

Apa kemungkinan kerugian menggunakan JavaScript (sisi klien) saat membuat game multi-pemain?

Deskripsi permainan: Ini adalah MMORPG / RTS. Itu berarti pemain secara aktif berkontribusi pada struktur di dunia dan membuat banyak konten sendiri.

jcora
sumber
Saya ingin tahu: mekanisme apa yang Anda gunakan untuk klien untuk berbicara dengan server, dan seperti apa latensi itu? Platform apa yang Anda gunakan untuk server?
Will
Server berjalan di netbook saya yang menjalankan Ubuntu Linux, dan ditulis dalam JavaScript sisi server, yang berjalan menggunakan node.js.
jcora
Saya tidak tahu mengapa saya awalnya mengangkat pertanyaan ini. Diubah menjadi downvote dan mempertimbangkan untuk memberikan suara dekat, karena "apakah ___ ide yang bagus?" tidak pernah benar-benar pertanyaan yang bisa dijawab. Memang, dalam jawaban saya, saya bahkan menunjukkan bahwa pertanyaannya tidak dapat dijawab dengan tepat.
jhocking
Juga, saya merasa ingin mengubah judul menjadi "Apakah permainan multipemain dalam JavaScript adalah ide yang buruk ?" akan meningkatkan pertanyaan. Pada awalnya itu tampak seperti perubahan sepele, tetapi menyusun kembali pertanyaan sambil mencari kelemahan membuatnya lebih bisa dijawab daripada "teknologi mana yang harus saya gunakan?" pertanyaan agak. Bertanya "apakah teknologi ini bagus?" hanya mengundang penggilingan kapak.
jhocking
1
Saya tidak tahu apa yang dipikirkan mod tetapi saya sangat menyukainya sekarang. kembali ke upvote
jhocking

Jawaban:

9

Tidak apa-apa jika:

  1. Server tidak mengirim informasi apa pun tentang pemain di belakang bidang tampilan pemain lokal (harus dihitung di sisi server) ke pemain lokal (untuk mencegah wallhacking).
  2. Semua tindakan diperiksa untuk ketersediaan di server ketika pemain menekan tombol aksi.
  3. Anda hanya merender pada klien - semua tindakan dilakukan di server dan hanya diprediksi pada klien.
  4. Semua tindakan berwaktu berada di sisi server.
Triang3l
sumber
Ya, saya melakukan hal-hal ini.
jcora
10
Harap perhatikan bahwa instruksi ini berlaku untuk setiap game multi-pemain, terlepas dari bahasa, platform, atau apa pun.
o0 '.
10

Apakah game Anda cocok atau tidak untuk pengembangan JavaScript tergantung pada game tersebut. Anda tidak menggambarkan permainan Anda, jadi tidak ada cara bagi kami untuk menjawab pertanyaan dalam judul.

Namun saya dapat mengatakan bahwa masalah peretasan Anda tidak menjadi masalah di sini. Bukan karena JavaScript tidak dapat diretas (dapat, dan mudah) tetapi demikian juga setiap teknologi sisi klien lainnya. Salah satu prinsip dasar pengembangan game multi-pemain adalah "jangan pernah mempercayai klien". Rancang game Anda sedemikian rupa sehingga apa pun yang Anda butuhkan untuk melindungi dari peretasan sedang berjalan di server, karena klien akan diretas. Ini berarti hanya mengirim perintah UI dari klien (mis. "Pemain mengklik tombol Bom") dan menghitung hasil tindakan pemain di server. Kemudian server mengirimkan kembali kepada klien hasil dari tindakan tersebut.

Karena apa pun teknologi yang Anda andalkan, Anda harus merancang game Anda dengan asumsi bahwa komponen sisi klien akan diretas, kemampuan hack JavaScript tidak menjadi pertimbangan ketika memutuskan apakah akan menggunakan JavaScript atau tidak.

jhocking
sumber
Terima kasih banyak. Saya akan mengedit posting saya dan menjelaskan permainannya sekarang.
jcora
3
tidak pernah tidak pernah tidak pernah mempercayai klien, apakah itu javascript atau yang lainnya!
the_e
1
Meskipun semua klien game memang dapat diretas, beberapa di antaranya lebih mudah diretas daripada yang lain.
Jonathan Connell
2
Itu benar, tetapi perbedaannya tidak relevan. Saat merancang keamanan untuk gim Anda, apa masalahnya jika opsi A lebih sulit diretas daripada opsi B jika keduanya akan diretas?
jhocking
2

Orang-orang dapat mengubah kode klien untuk menipu, itu adalah masalah untuk game multipemain apa pun. Jika kecepatan reaksi atau penyelesaian tugas matematika yang cepat adalah bagian dari permainan, Anda tidak dapat sepenuhnya mencegah kecurangan.

Untuk elemen gim lainnya, Anda harus memastikan bahwa klien tidak mau dan tidak bisa mendapatkan informasi yang seharusnya disembunyikan oleh pemain. Dan tentu saja server harus memvalidasi bahwa setiap tindakan yang diambil oleh pemain adalah sah.

Masalah terbesar yang saya lihat dalam permainan JavaScript adalah bahwa banyak browser memiliki kecenderungan untuk gagap, terutama Firefox yang sangat buruk terakhir kali saya periksa. Untuk alasan ini, JavaScript bukan pilihan yang baik untuk gameplay yang sensitif terhadap waktu. Tetapi untuk permainan berbasis giliran atau setidaknya permainan lambat, JavaScript dapat bekerja dengan baik.

aaaaaaaaaaaa
sumber
2

Mengubah variabel Javascript cukup mudah dilakukan dengan alat-alat seperti Firebug (untuk firefox) atau perangkat pengembang di Safari / Chrome. Anda cukup mengetikkan javascript di konsol dan itu akan dieksekusi. Sebagai aturan sederhana, jangan mengandalkan sisi klien untuk keamanan. Selain itu, dengan diperkenalkannya elemen kanvas HTML5, javascript menawarkan Anda beberapa kemungkinan nyata untuk gim-gim sederhana (misalnya Angry Birds versi javascript / html5 lengkap).

Pjotterke
sumber