Gerçek zamanlı çok oyunculu için Javascript ve PHP? [kapalı]


13

Javascript clientide ile PHP / mysql serverside birleştirmek HTML5 gerçek zamanlı çok oyunculu (küçük ölçekli) tarayıcı oyunları için iyi bir fikir olup olmadığını merak ediyorum?

Teknik bilgim çok sınırlı ve gelecekte node.js öğrenmeyi planlasam da, öğrenme eğrisi şu anda oldukça büyük.

Zaten PHP aşina olduğum için çok daha hızlı çalışmasını istiyorum hissediyorum.

Düşündüğüm ölçek o zaman 2-8 oyuncu. Ve istemciden sunucuya ileti sayısını mümkün olduğunca düşük tutmaya çalışıyor.

Saklamak / işlemek istediğim değerler şunlardır:

  • Oyuncu adı ve kimliği.
  • X ve Y pozisyonları.
  • Sağlık.
  • Donanımlı öğeler (maksimum 8 yuva, muhtemelen daha az).
  • Eylemler (yürüme, saldırı, kullanım vb. Ama aynı anda sadece 1 aksiyon / oyuncu).
  • Bullet X, Y koordinatları ve yörüngesi.
  • Lonca / Klan adı.
  • Ve bazı temel sohbet / postalama işlevi.

Tahminimce en iyi çözüm olmasa da, mantığı küçük tuttuğum sürece, bu tamamen yapılabilir. Haklı mıyım?


4
Mükemmel yapılabilir. Neden sadece denemiyorsun? En kötü durum, öğrenmeye biraz zaman harcarsınız, en iyi durum, tam olarak ne istediğinizi alırsınız.
William Mariager

1
Evet ama bunun biraz zaman alacağını hayal ediyorum ve zaman kaybetmekten hoşlanmıyorum, bu yüzden buraya sordum. =)
justanotherhobbyist

8
Bir şey öğrenirseniz, zaman boşa gitmedi. ;) Bir şey dikkate değer dili geçerseniz, yeni bir dil öğrenmek zaman harcama olacak, olan ve yanlış gittiğini bulmak için hata ayıklama çok daha demektir aynı zamanda en ağ öğrenme. Bildiklerinize sadık kalırsanız, önce ağ kurmayı öğrenirsiniz ve daha sonra verimsiz olduğu ortaya çıkarsa, bir dahaki sefere birisi benzer bir soru sorduğunda, doğru cevabı bilirsiniz çünkü test ettiniz.
William Mariager

1
Bu gerçekten iyi bir nokta
justanotherhobbyist

Yanıtlar:


12

Gerçek zamanlı bir oyun için gecikmeyi en aza indirmek istersiniz. PHP ve Düğüm ile ilgili notlarla bunu başarmak için iki ipucu:

  1. WebSockets kullanın. Sunucu ve istemci arasında hızlı iki yönlü iletişime izin verir. Burada node.js'yi kullanmanın avantajı, borunun her iki ucunda da aynı JavaScript API'sini kullanabilmenizdir. Ayrıca node.js için WebSockets'i desteklemeyen daha küçük tarayıcılara geri dönüş teknolojileri sağlayan harika socket.io modülü de var. Biraz googling, gerçekten isterseniz WebSockets'i PHP'den de kullanabileceğiniz anlaşılıyor.
  2. Veritabanını hızlı hareket eden nesnelerin koordinatları gibi zaman açısından kritik verilere dahil etmeyin. Bu, onları bellekte tutmak anlamına gelir; bu, geleneksel PHP kullanım modeli için her zaman bir apache (veya herhangi bir web sunucusu) isteği için bir kez tetiklenmesine uygun değildir, ancak PHP sunucu uygulamanızı bağımsız olarak da başlatabilirsiniz. Tahmin ediyorum ki Node, V8 çekirdeği ile PHP'den daha hızlı olacak . Bunun bir sorun olup olmadığı, oyununuzun ne kadar zorlu olduğuna ve sunucunun ne kadar güçlü olduğuna bağlıdır.

Kendimi node.js'yi almak çok kolay buluyorum ve zaten biraz JavaScript kodlamanız gerekeceğinden, denemenizi tavsiye ederim. En azından gerçek zamanlı bir iletişim kanalı kurmanın ne kadar önemsiz olduğunu görmek için socket.io öğreticilerine hızlı bir göz atın .


Puan 2 için +1. Bu konuda yapabileceğiniz en büyük hata, her etkinlikte MySQL sorgularının tetiklenmesini beklemektir. Oyun verilerini HDD'den çıkarmak için yapabileceğiniz her şey yardımcı olacaktır. Bunun için Memcached'i kötüye kullanma konusunda başarılı oldum. Şüphesiz başka yollar da var.
DampeS8N

Evet, gerçekten düğüm öğrenmek istiyorum, ama cmd'den başlamak için henüz yapmadım, geliştiricilerin yaptığı en büyük hata içeri girmeyi çok zorlaştırmaktı. En azından şimdi Windows sürümü bir yükleyici ile geliyor, iyi bir öğretici bulursam bir deneyebilir.
justanotherhobbyist

Düğümün başlatılması veya kullanılması hiç de zor değil. PHP'den daha zor, evet, ama PHP rahatlığı için korkunç bir fiyat ödüyor - Apache'ye ve varsayılan olarak her yerde gömülmesine izin veren tasarım, PHP'yi tamamen ve kesinlikle en kötü seçim yapan birçok soruna da neden oluyor. gerçek zamanlı oyun arka uç yapabilirsiniz. Düğüm, Python, Ruby, Java, vb. Hepsi uygulama sunucusunu kurmanızı gerektirir, ancak bu çok model PHP'de elde edilmesi imkansız olan yüksek oranda ölçeklenebilir olay güdümlü bellek içi işlemeye izin verir.
Sean Middleditch

1

Tapio'nun yanıtıyla birlikte (mümkünse) sunucuya kullanıcı girişi (tıklamalar ve klavye girişi) göndermenizi ve hem sunucunun hem de istemcinin oyunu taklit etmesini öneririm. Her N işareti, istemcinin sunucudan bir senkronizasyon istemesini ister ve sunucu, istemcinin sağlık, öğeler vb. Gibi oyunu oluşturmak için ihtiyaç duyduğu tüm bilgileri yanıtlar. çok.

Tabii ki hem sunucunun hem de müşterinin oyunun aynı uygulamasına sahip olması gerekecektir, böylece bu biraz daha fazla iş olabilir. Hem istemci hem de sunucu üzerinde mükemmel uygulamalarınız varsa, istemcinin daha az eşitleme yapması gerekir.

Bu, istemci / sunucu mesajlaşmasını ve gecikmeyi azaltır. Bu aynı zamanda hile yapmayı önlemeye de yardımcı olacaktır.

Bu oyunu JavaScript'te oluşturduğunuzu varsayarsak, NodeJS kullanarak arka ucu JavaScript'e de yazmanız faydalı olabilir. Bu şekilde, oyununuzun JavaScript uygulamasını hem sunucu hem de istemci için yeniden kullanabilirsiniz.


0

Nodejs öğrenmenizi öneririm. Zaten Javascript kullanıyorsanız, o kadar zor olmayacak. Nodejs ile hızlı bir şekilde TRON Multiplayer oyunu yaptım ve bu benim ilk günümdü. (Oh, ve istemci bir HTML5 tuvaliydi; diğer yorumlarda belirtildiği gibi sadece anahtar giriş gönderiyordum.)

Nowjs adlı bir modüle bakın. İyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.