Javascript dan PHP untuk multipemain waktu-nyata? [Tutup]

13

Saya ingin tahu apakah menggabungkan Javascript clientside dengan PHP / mysql serverside adalah ide yang bagus untuk game browser HTML5 real-time multiplayer (skala kecil)?

Pengetahuan teknis saya sangat terbatas, dan meskipun saya berencana untuk belajar node.js di masa depan, kurva pembelajaran agak besar sekarang.

Karena saya sudah terbiasa dengan PHP, saya merasa akan berfungsi lebih cepat.

Skala yang saya pikirkan adalah 2-8 pemain saat itu. Dan berusaha menjaga agar pesan klien ke server serendah mungkin.

Nilai yang ingin saya simpan / pegang adalah:

  • Nama dan ID pemain.
  • Posisi X dan Y.
  • Kesehatan.
  • Barang yang dilengkapi (maksimum 8 slot, mungkin kurang).
  • Tindakan (berjalan, menyerang, menggunakan dll tetapi hanya 1 aksi / pemain pada suatu waktu).
  • Bullet X, Y koordinat dan lintasan.
  • Persekutuan / nama Klan.
  • Dan beberapa fungsi dasar obrolan / surat.

Dugaan saya adalah meskipun itu bukan solusi terbaik, tetapi selama saya menjaga logikanya kecil, ini benar-benar bisa dilakukan. Apakah saya benar?

justanotherhobbyist
sumber
4
Kedengarannya sangat bisa dilakukan. Kenapa kamu tidak mencobanya saja? Kasus terburuk, Anda menghabiskan waktu belajar, kasus terbaik, Anda mendapatkan apa yang Anda inginkan.
William Mariager
1
Ya tapi saya membayangkan ini akan memakan waktu lama, dan saya tidak suka membuang waktu, itu sebabnya saya bertanya di sini. =)
justanotherhobbyist
8
Jika Anda mempelajari sesuatu, waktunya tidak sia-sia. ;) Sesuatu yang patut dipertimbangkan adalah, jika Anda beralih bahasa, Anda akan menghabiskan waktu mempelajari bahasa baru dan belajar jaringan pada saat yang sama, yang berarti lebih banyak debugging untuk menemukan kesalahan Anda. Jika Anda tetap dengan apa yang Anda ketahui, Anda akan belajar jaringan terlebih dahulu, dan kemudian Anda bisa porting jika ternyata tidak efisien, dan lain kali seseorang mengajukan pertanyaan serupa, Anda akan tahu jawaban yang tepat karena Anda mengujinya.
William Mariager
1
Itu sebenarnya poin yang bagus
justanotherhobbyist

Jawaban:

12

Untuk gim real-time, Anda ingin meminimalkan latensi. Berikut adalah dua tips untuk mencapainya, dengan catatan tentang PHP dan Node:

  1. Gunakan WebSockets. Mereka memungkinkan komunikasi dua arah yang cepat antara server dan klien. Menggunakan node.js di sini memiliki keuntungan bahwa Anda dapat menggunakan JavaScript API yang sama di kedua ujung pipa. Ada juga modul socket.io yang luar biasa untuk node.js yang menyediakan teknologi cadangan untuk browser yang lebih rendah yang tidak mendukung WebSockets. Googling sedikit, sepertinya Anda juga dapat menggunakan WebSockets dari PHP jika Anda benar-benar mau.
  2. Jangan melibatkan database dalam data penting waktu seperti koordinat objek yang bergerak cepat. Ini berarti menyimpannya dalam memori, yang tidak terlalu cocok untuk model penggunaan PHP tradisional yang memecatnya sekali untuk setiap permintaan untuk apache (atau server web apa pun), tetapi Anda dapat meluncurkan aplikasi server PHP Anda juga sebagai standalone. Saya kira Node, dengan inti V8-nya, akan lebih cepat dari PHP . Apakah itu masalah tergantung pada seberapa menuntut gim Anda dan seberapa kuat servernya.

Saya sendiri menemukan node.js sangat mudah untuk diambil dan karena Anda akan perlu sedikit kode JavaScript, saya sarankan Anda mencobanya. Setidaknya lihat sekilas tutorial socket.io untuk melihat seberapa sepele mengatur saluran komunikasi real-time.

Tapio
sumber
+1 untuk poin 2. Kesalahan terbesar yang dapat Anda buat dengan ini adalah mengharapkan permintaan MySQL untuk diaktifkan pada setiap acara. Apa pun yang dapat Anda lakukan untuk memindahkan data game dari HDD akan membantu. Saya sudah sukses dengan menyalahgunakan Memcached untuk ini. Tidak diragukan lagi ada cara lain.
DampeS8N
Ya saya benar-benar ingin belajar simpul, tetapi saya belum memulainya dari cmd bahkan, kesalahan terbesar yang dibuat pengembang adalah membuatnya sangat sulit untuk masuk. Paling tidak sekarang versi windows dilengkapi dengan installer, mungkin mencobanya jika saya menemukan tutorial yang bagus.
justanotherhobbyist
Node sama sekali tidak sulit untuk memulai atau digunakan. Lebih sulit daripada PHP, ya, tetapi PHP membayar harga yang mengerikan untuk kenyamanannya - desain yang memungkinkannya tertanam ke dalam Apache dan diaktifkan secara default di mana saja tanpa konfigurasi juga menyebabkan banyak masalah yang menjadikan PHP benar-benar dan benar-benar pilihan terburuk Anda. dapat membuat backend game real time. Node, Python, Ruby, Java, dll semua mengharuskan Anda untuk menyiapkan server aplikasi, tetapi model itu memungkinkan pemrosesan dalam-memori yang didorong oleh skala yang sangat skalabel yang secara harfiah mustahil dicapai dalam PHP.
Sean Middleditch
1

Bersamaan dengan jawaban Tapio, saya hanya ingin menyarankan (jika mungkin) mengirim input pengguna (klik dan input keyboard) ke server, dan meminta kedua server dan klien meniru permainan. Setiap N dicentang, klien akan meminta server untuk menyinkronkan, dan server akan membalas dengan semua informasi yang dibutuhkan klien untuk membuat permainan seperti kesehatan, item, dll. Ini untuk memastikan klien tidak mendapatkan sinkronisasi juga banyak.

Tentu saja baik server dan klien harus memiliki implementasi permainan yang sama persis sehingga ini mungkin sedikit lebih banyak pekerjaan. Jika Anda memiliki implementasi yang sempurna pada klien dan server, klien harus lebih jarang melakukan sinkronisasi.

Ini akan mengurangi perpesanan klien / server dan ini mengurangi latensi. Ini juga akan membantu mencegah kecurangan.

Dengan asumsi Anda membuat game ini dalam JavaScript, mungkin bermanfaat untuk menulis back-end dalam JavaScript juga, menggunakan NodeJS. Dengan cara ini Anda bisa menggunakan kembali implementasi JavaScript dari gim Anda untuk server dan klien.

art0rz
sumber
0

Saya merekomendasikan belajar Nodejs. Jika Anda sudah menggunakan Javascript, itu tidak akan terlalu sulit. Saya membuat game Multiplayer TRON dengan cepat dengan Nodejs, dan itu adalah hari pertama saya menggunakannya. (Oh, dan klien adalah kanvas HTML5; Saya hanya mengirim input kunci, seperti yang disebutkan dalam komentar lain.)

Lihatlah modul yang disebut nowjs. Semoga berhasil!

David Da Silva Contín
sumber