Web oyunu eşzamanlılık kontrolü

0 Cevap php

Orada eşzamanlılık hakkında diğer bazı SO sorular vardır ama onlar oldukça benim senaryoyu adresi yok.

Yani ben kullanıcıların birbirleriyle, mücadele ve etajer ile etkileşim bir oyun var diyelim. Herhangi bir anda, bir oyuncu potansiyel olay oluyor görebilirsiniz hepsi diğer oyuncular, çoklu etkileşimleri dahil olabilir. Bu oyuncuların herhangi biri siteyi çarptığında, ilgili herhangi bir veri güncelleme ve kullanıcıya göstermek gerekiyor.

Örnek durum: Oyuncu bir oyuncu B ile mücadele, ve olaylar bu mücadelede her birkaç dakikada bir olur. Aynı zamanda, oyuncu bir de dilsiz şans By oyuncu C ile etkileşim, hem de etkileşim için olaylar sonraki aynı saniyede nedeniyle olmak olur.

Bu ikinci yine dilsiz şans tarafından, geldiğinde ben don, B oyuncusu ve oyuncu her ikisi de C 'oyuncu A. Mücadele oyuncu A. hakkında bilgi güncelleştirme gerektirir ile kavgalar durumunu kontrol etmek için, aynı zamanda siteyi vurdu t kodun düzgün, A'nın veri berbat alabilirsiniz.

Ben bu durumla iki oyun, farklı bir çözüm ve farklı konular ile her vardır. Bunlardan biri bir kilit kullanır, böylece kullanıcı siteyi çarptığında, onlar bir db satırda bir kilit elde, başarıyla alınan kilitlerin için veri okumak, sonra değişiklikleri yazmak ve kilidi açmak. Ama bazen, hala bilinmeyen nedenlerle, bu başarısız olur ve kilit kullanıcıların şikayet ve biz elle düzeltmek zorunda, sonsuza kadar takılıyor. Benim diğer oyunu hiç bu değişiklikleri yapmadan sadece tek bir süreç var gibi (neredeyse) tartışmalı sorun yapma, bu işlemleri yürütmek için bir daemon kullanır. Ama oyuncular hala aynı anda başka şeyler yapmak, ve potansiyel olarak aynı sorunu neden olabilir.

Ben iyimser veya timestamp tabanlı kontrolü gibi bu farklı çözümleri hakkında biraz okudum. Ben sormak istiyorum:

  1. Bunlardan hangisi en sık mayın gibi durumlar için kullanılır ve kolay uygulamak için hangisi?

  2. "Sadece tüm bu alanları üzerine." Şeklinde benim bir sonraki proje Kohana (PHP) ve ORM kullanarak, yani benim db varsayılan iradesini yazıyor Bunun için benim kendi güncelleme sorguları yazmak gerekir yoksa ben ORM ile uyumlu bir çözüm elde edebilirsiniz?

  3. Ne birden fazla tablo içeren işlemler hakkında? Bir mücadele sonucu dövüşlerinin tabloyu değiştirmek için vardır, ve oyuncu bilgileri, belki daha fazla şeyler tablo çok. Çözümleri burada çalışmak daha kolay olan? Benim tablolar tüm işlem damgası sütunları gerekecek mi?

  4. Bu çözümlerin bir çok zaman bir çatışma yeniden deneyin ya da görmezden ya orada olduğunu söylüyorlar. Bu benim için ne anlama geliyor? Kullanıcı için ek yük zaman neden olur benim tüm komut, yeniden demek "yeniden deneme" mı? Olaylar bir noktada yürütmek zorunda beri, geçerli bir seçenek olduğunu görmezden sanmıyorum. Diğer sorulara ben kullanıcıya bir çakışma hatası sunan genellikle geçerli bir seçenek oldu, bulundu - benim için öyle değil.

  5. Eşzamanlılık kontrolü performans etkileri nelerdir - buna bile değer mi?

0 Cevap