Background
We vardır currently working on a strategy web-browser game based on php, html ve javascript. The plan is to have 10,000+ users playing within the same world.
Şu vea biz memcached kullanıyor:
- mağaza json statik veri, dil dosyaları
- store changeable serialized php class objects (such as armies, inventorys, unit-containers, buildings, vb)
Arkada bir mysql sunucusu çalışıyor ve tüm oyun veri aswell tutan var. Bir nesne bizim ObjectLoader aracılığıyla yüklendiğinde bu sırayla yükler:
- checks a static hashmap in the script for the object
- checks memcache if it has already been loaded into it
- otherwise loads from database, ve saves it into memcache ve the static temp hashmap
Biz işlevsellik her zaman nesneler arasında yapılan bir sınıf nesne yönelimli yaklaşım kullanarak bütün oyunu inşa etmişlerdir. Bu Beause biz güzel bir yapı elde başardı, ve oyun ile etkileşim memcached yardımıyla biz istemci-sunucu iyi istek kere aldık düşünüyorum.
Ben memcache senkronize değil, aynı zamvea yaygın hafızasında tam bir oyun tutmak için kullanılan değil farkındayım. Başlangıçta bir sunucunun devreye alma sonrası yükleme süreleri ilk kez memcache içine nesneleri yüklerken yüksek olacak, ancak sunucu bir süredir yayında olan ve en yükler memcache olan oluyor sonra, yükler azalacaktır.
Şu vea aynı zamvea memcache ve veritabanına değiştirilen nesneleri kaydediyorsunuz. Daha önce biz sadece belirli bir süre sonra veya aralıklarla db içine nesneleri kaydetmek için bir fikrim yoktu, ama memcache / sunucu aşağı giderse nedeniyle risk tutarsızlık, biz şimdi bunu atlanır.
Sunucu istemci istekleri genellikle sırayla görüntüleri ve javascript ile görsel tarayıcıda temsil nesneyi değiştirmeden nesnenin durumu basit json formatlı döner. Ama zaman zaman bir nesne, en son güncelleme ne zaman bağlı olarak, (planlı yapılar zaman ilerlemeyi tutan bir yapı-kuyruk artar, ve / veya planlı-kuyruk-ürün-dizi değişti örneğin) yeni bilgilerle günceller.
Questions:
- Do you see how this could work or vardır we walking in blindness here?
- Do you expect us to have a lot of inconsistency issues if someone loads ve updates the a memcache objects while someone else does the same?
- Is it even doable to do it in the way he have done it? Seems to be working fine atm, but so far we have only been 4 people online at the same time..
- Is some other cache program more fit for this class-object approach than memcached?
- Bu durum için size herhangi bir başka ipuçları var mı?
UPDATE
Sadece bir "normal bir web sayfası" (applet, flash, vs) olduğu sunucu üzerinde farklı javascript-nesnelerin durumu .. bir "gerçek oyun-devlet" tutan tek, böylece biz oyunu uyguladıklarını İstemci daha sunucunun oyun devlet tahmini versiyonu gibi.
Eğer bazı şeyleri önemli şeyler yapmadan önce zaman zaman ve müşterinin görsel devlet, (sunucunun durumuna diye bir kışla gelemez örneğin istemci şeyleri güncellenen bir kışla inşa etmek sunucuyu sorar, sunucu göre mevcut kaynakları günceller gelir- Daha sonra sunucu ve veri bir kışla inşa etmeye çalışır ya da bir hata mesajı atmalarını, ve sonra kaynaklar üzerindeki mevcut sunucu durumunu gönderir, istemciye geri binalar) ..
Bu hızlı tempolu oyunu gerçek bir strateji oyunu lika değildir. Daha binaları tamamlamak için birkaç gün 1 dakika sürebilir oldukça yavaş 3-4 ay teneffüs oyunu gibi.