Node.js için gerçek zamanlı çok oyunculu oyun tasarımı ilkeleri


12

Yahn Bernier'in İstemci / Sunucu Oyun İçi Protokolü Tasarım ve Optimizasyonunda Gecikme Dengeleme Yöntemleri adlı 2001 tarihli makalesinden uyarlanan çok oyunculu ağ ile ilgili Valve makalesini okudum . Socket.io aracılığıyla istemcilere bağlı bir node.js sunucusu kullanarak gerçek zamanlı çok oyunculu bir oyun yapıyorum ve aşağıda ayrıntıları verilen ilkelerle ilgili birkaç sorum var:

Varlık Enterpolasyonu

[İnterpolasyon], sunucu güncellemelerini arabelleğe alıp aralarında boşluklar arasında düzgün bir şekilde enterpolasyon uygulayarak oynatarak normalde ortaya çıkan gergin hareketi önler. Ayrıca paket kaybının neden olduğu aksaklıklara karşı da koruma sağlayabilir.

Müşteri Tarafı Tahmini

Tahmin, sunucunun bunları onaylamasını beklemeden, yerel oyuncunun eylemlerinin etkilerini tahmin eden kavramdır. Bir varlığın tahmini durumu, bir eşleşme veya yanlış eşleşme algılanana kadar sunucu komutlarına karşı test edilir.

Gecikme Tazminatı

Gecikme telafisi, oyuncunun komut gönderildiğinde ne gördüğünü görmek için [kullanıcı girişi] işlenirken zamanı geri almak için bir oyuncunun gecikme süresi kullanan sunucu kavramıdır. Tahminle birlikte, gecikme telafisi, ağ gecikmesi ile saldırganın perspektifinden neredeyse ortadan kalkma noktasına kadar savaşmaya yardımcı olabilir.

  • İlkeler UDP için olduğu gibi TCP için de geçerli midir ve uygulamada herhangi bir farklılık olur mu? Varlık enterpolasyonunun paket kaybına karşı korumaya ihtiyacı olmadığını görebiliyorum.

  • UDP ve Node.js kullanarak bir sunucu ile web tarayıcısı arasında iletişim kurabilir miyim?

  • Kağıt on yıldan eski olduğu için bu ilkeler hala kullanılıyor mu veya başka teknoloji ortaya çıktı mı?

Herhangi bir yardım çok takdir edilecektir.


1
Popüler inanışın aksine, çok oyunculu oyunlar için aslında UDP'ye ihtiyacınız yok. En iyisinden öğrenin; WoW TCP kullanıyor ve diğer birçok AAA çok oyunculu oyunun da olduğuna inanıyorum. İnsanlar sadece birilerinin tavsiyelerini takip ederler ve sonra önümüzdeki 5 ayı TCP'nin kötü ve yavaş bir sürümünü uygulamak için harcarlar!
jcora

1
(Tabii ki, avantajlarını kullanabilen iyi bir UDP protokolü geliştirmek için bilgi ve kaynaklara sahip olduğunuzdan emin değilseniz.)
jcora

1
Hiçbir AAA FPS oyunu TCP kullanmaz. Gerçek zamanlı güncelleme gerektiren oyunlar için gerçekten çok yavaş. Ancak bir aksiyon oyunu yazmadığı için TCP'den kurtulabilmesi gerekir.
Brendan Lesniak

@Yannbane WoW'un TCP kullandığını bilmiyordum. Bulabildiğim kadarıyla MMO'ların yaptığı gibi görünüyor. HTML5 ile çok oyunculu oyunlar yazma konusunda beni daha güvende hissettiriyor. Teşekkürler!
dreta

Yanıtlar:


6
  • Gecikmelerin etkilerini azaltma ilkeleri, taşıma protokolünden bağımsız olarak aynıdır. Paket kaybı başka bir konudur - bazı paketleri kaybetmek kritik değildir, çünkü bir sonraki güncelleme muhtemelen yoldadır - burada UPD'nin avantajı vardır, ancak belirli bir paketin teslim edildiğinden emin olmanız gerektiğinde, özel UDP ile bunu yapmak için onay kodu
  • Node.js UDP'yi destekler, ancak web tarayıcıları desteklemez (eklentiler olmadan). İkisi arasında iletişim kurmak için en iyi gerçek zamanlı yöntem, temelde TCP olan Web Sockets'tir. Ancak iletişim için, web soketlerini desteklemeyen tarayıcılar için yedekler sağlayan Socket.IO'yu kullanmak isteyebilirsiniz.
  • İlkeler aynı kalır.

1
Sanırım bu modası geçmiş - WebRTC, UDP benzeri iletişimi kullanmanın bir yolu olmalı, değil mi?
Nikolay Tsenkov

4

Sven Bergstrom tarafından buildnewgames.com sitesinde yayınlanan HTML5'te Gerçek Zamanlı Çok Oyunculu Oyunlar hakkındaki bu makaleye göz atmalısınız, aynı şeylerden bahsediyor ve Node.JS kullanıyor. Kendime benzer bir şey var. Şimdi, geri kalanıyla başa çıkmaya çalışmadan önce, müşteri tarafı tahmini ve enterpolasyon ve benzerleri hakkında daha fazla araştırma yapıyorum.

Socket.IO ve Node ile bunu yapabilmenin kesinlikle mümkün olduğuna inanıyorum, ancak teknoloji hala yeni, bu nedenle uygulama kılavuzlarında çok az dokümantasyon ve hiçbir şey için çok az şey olacak. Yaptığım şeyi yapmayı ve konuyu soyut üst düzey terimlerle ayrıntılı olarak incelemenizi ve ardından kendiniz uygulamaya çalışmanızı öneririm.


1

Teknolojinin hemen hemen aynı olduğuna inanıyorum. Ayrıca, kavramlar hangi dili kullandığınıza veya UDP veya TCP kullanıp kullanmadığınıza bağlı değildir. Burada her şey hakkında çok ayrıntılı bir açıklama yazdım http://www.gabrielgambetta.com/fpm1.html , güzel diyagramlar dahil :)

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.