PHP + MySQL iPhone MMORPG [kapalı]

4 Cevap php

PHP ve MySQL (1.000 + oyuncu) kullanarak iPhone için bir MMORPG yapmak mümkün mü? Ben oyuncu bilgileri (adı, kullanıcı adı, pas, yer, mevki) depolamak için MySQL kullanarak düşünüyordum. Sonra php yoluyla bu verileri erişilebilir kılacak (php sayfasına bir konuma geçmek ve bu alan için tüm oyuncu bilgileri verir) olacaktır. PHP ve MySQL gibi bir şey için yeterince hızlı olurdu? Eğer değilse, ne arkaplanı için diğer bazı çözümler olurdu? Ayrıca, VPS (http://www.linode.com/) yeterince hızlı olacağını ya da ben özel bir sunucu ile gitmeli?

Teşekkürler

4 Cevap

Peki. Senin bu yana zor bir soru - justin işaret ettiği gibi - oyun ne kadar büyük bir şey hakkında söz yok.

Ancak, soruya benim cevabım 'evet'. PHP ve MySQL kesinlikle böyle bir sistemi çalıştırabilen olacak. Daha alakalı soru, doğru seçim olup olmadığını - ve bu sorunun cevabı büyük olasılıkla muhtemelen doğru seçim değildir olmasıdır.

MMORPG her istemci sunucuya çeşitli istekleri / saniye olacak demek ki, normalde oldukça gerçek zaman vardır. Canlı tutma HTTP bağlantıları, vs kullanmak bile ben olmayan bir HTTP tabanlı bir yaklaşım kullanarak iyi bir sonuç almak istiyorum kanısındayım.

Sen istekleri hizmet için ders kullanım PHP olabilir ve daha sonra JSON veya benzeri ile bunları biçimlendirmek ve istemci bu veriler üzerinde tepki var. Ancak ben çünkü MMORPG var gecikme gereksinimleri C veya benzeri gibi tamamen farklı bir programlama dili, seçiyor.

Ben bu yüzden bu sadece benim mütevazı endişeleri bir oyun uzmanı ya da bir C uzman değilim.

Bu konuda bir sürü, açıkçası, oyuna bağlıdır. 1,000 kullanıcılar için işe yarayabilir? Bir kutu üzerinde? Muhtemelen değil. Küçük bir kümede? Belki basit tutmak eğer. Popüler alır sonra, ancak, yönetmek çok zor bir platformda bir yatırım yaptık. Sen çünkü kullanıcılar arasındaki etkileşim büyük web siteleri veba olanlar, ama daha zor aksine ölçek kabuslar görür.

Hatta basit sıra tabanlı oyunlar (Facebook ve Myspace apps düşünüyorum) LAMBASI arka ucu kullanarak büyük ölçekli sorunları var ... ve gerçek-zamanlı hiçbir yerde yakın.

MySQL basitçe (yazma ve çoğaltma için) işlem yükünü kaldırabilecek kadar hızlı değildir. Neredeyse hiç veritabanı. Sen yazıyor programa toplu ardından, RAM içinde devlet tutmak gerekir. Bu teknik sonunda bir duvara vurur ve daha sonra tamamen izole kümeler halinde veritabanları bölmek gerekir.

ÇOK yaratıcı sürece insanlar izole veri adaları üzerinde birbirlerine karşı oynamak alma, zor alır. Bu çözemeyeceği memcached bir sorundur. Muhtemelen de bu shard gerekir.

Popüler online oyunlar onların arka uçlarında özel streaming protokolleri kullanabilirsiniz. PHP ile güçlendirilmiş olsaydı World of Warcraft sadece mevcut olamazdı. Her iki oyuncu web sitenize güncellemeleri almak için her saniye vurmak gerekiyorsa, birbirlerine savaş için iki oyuncu alınamıyor. Lag, hareketleri animasyonlu ise, (en iyi) sarsıntılı olacak. Bir iki-yönlü iletişim protokolü gerekir.

Ben çok dağıtılmış mesajlaşma platformu içine bakarak öneririm. Paralellik için inşa ve var hatta belki de bir dil Erlang gibi kümeleme,.

Kesinlikle, PHP / MySQL ile gitmek kodunuzu önbelleğe ve optimize etmek için eAccelerator gibi bir şey kullanmak ve bir CDN (Amazon S3 akla gelir), hız bol vermek gerektiği üzerinde statik tüm içerik barındırması.

Ben bunun için gitmek söyleyebilirim. PHP / MySQL combo tarafından desteklenmektedir birkaç MMOG gördüm ve onlar (50 000 + aktif oyuncu ile) oldukça hızlı koştu. Eğer (hatta bunu düşünüyorsanız) (en azından oyun 1000'den fazla oyuncu aldığında) paylaşımlı hosting kullanarak unutsun rağmen.

Ayrıca APC gibi bazı önbelleğe alma teknikleri kullanarak düşünün ve db katmanda bir memcached destek uygulamak gerekir. Bir çok yardımcı olacaktır.

Eğer PHP (lighttpd'nin), Veritabanı ve statik içerik (resim, flash, vs) (nginx) için adanmış sunucular kullanabilirsiniz eğer daha iyidir. Bu makineleri ve statik içerik arasındaki yük çünkü örneğin IO concurency sizin MySQL öldürmez dağıtmak olacaktır.